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