bin/90334: /bin/sh trap problem
Maxim Konovalov
maxim at macomnet.ru
Wed Dec 14 01:40:08 PST 2005
The following reply was made to PR bin/90334; it has been noted by GNATS.
From: Maxim Konovalov <maxim at macomnet.ru>
To: Dmitriy Kirhlarov <dkirhlarov at oilspace.com>
Cc: bug-followup at freebsd.org, kst at oilspace.com
Subject: Re: bin/90334: /bin/sh trap problem
Date: Wed, 14 Dec 2005 12:36:50 +0300 (MSK)
[...]
> 2/ By your co-worker, Konstantin Stepanenkov, break an endless loop if
> we get ECHILD:
>
> Index: jobs.c
> ===================================================================
> RCS file: /home/ncvs/src/bin/sh/jobs.c,v
> retrieving revision 1.69
> diff -u -r1.69 jobs.c
> --- jobs.c 5 Sep 2005 17:57:19 -0000 1.69
> +++ jobs.c 13 Dec 2005 18:38:26 -0000
> @@ -929,6 +929,8 @@
> if (pid <= 0)
> return -1;
> }
> + if (errno == ECHILD)
> + job->state = 1;
> if (pid <= 0)
> return pid;
> INTOFF;
> %%%
BDE has more elegant version of this patch:
Index: sh/jobs.c
===================================================================
RCS file: /home/ncvs/src/bin/sh/jobs.c,v
retrieving revision 1.69
diff -u -r1.69 jobs.c
--- sh/jobs.c 5 Sep 2005 17:57:19 -0000 1.69
+++ sh/jobs.c 14 Dec 2005 09:35:03 -0000
@@ -924,6 +924,8 @@
} while ((pid == -1 && errno == EINTR && breakwaitcmd == 0) ||
(pid > 0 && WIFSTOPPED(status) && !iflag));
in_dowait--;
+ if (pid == -1 && errno == ECHILD && job != NULL)
+ job->state = JOBDONE;
if (breakwaitcmd != 0) {
breakwaitcmd = 0;
if (pid <= 0)
%%%
I am going to commit it after some tests.
--
Maxim Konovalov
More information about the freebsd-bugs
mailing list