Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 30 Apr 2010 22:40:09 GMT
From:      dfilter@FreeBSD.ORG (dfilter service)
To:        freebsd-bugs@FreeBSD.org
Subject:   Re: bin/146189: commit references a PR
Message-ID:  <201004302240.o3UMe9ug013162@freefall.freebsd.org>

next in thread | raw e-mail | index | archive | help
The following reply was made to PR bin/146189; it has been noted by GNATS.

From: dfilter@FreeBSD.ORG (dfilter service)
To: bug-followup@FreeBSD.org
Cc:  
Subject: Re: bin/146189: commit references a PR
Date: Fri, 30 Apr 2010 22:34:08 +0000 (UTC)

 Author: ed
 Date: Fri Apr 30 22:33:49 2010
 New Revision: 207453
 URL: http://svn.freebsd.org/changeset/base/207453
 
 Log:
   Remove WNOHANG flag from wait3().
   
   Because script(1) now reliably terminates when the TTY is closed, it may
   be the case that the call to wait3() occurs just before the child
   process exits. This causes error codes to be ignored.
   
   Just change script(1) to use waitpid() instead of wait3(). This makes it
   more portable and prevents the need for a loop, since waitpid() only
   returns a specified process.
   
   PR:		bin/146189
   Tested by:	amdmi3@, older version
   MFC after:	2 weeks
 
 Modified:
   head/usr.bin/script/script.c
 
 Modified: head/usr.bin/script/script.c
 ==============================================================================
 --- head/usr.bin/script/script.c	Fri Apr 30 22:31:37 2010	(r207452)
 +++ head/usr.bin/script/script.c	Fri Apr 30 22:33:49 2010	(r207453)
 @@ -219,23 +219,17 @@ usage(void)
  void
  finish(void)
  {
 -	pid_t pid;
 -	int die, e, status;
 +	int e, status;
  
 -	die = e = 0;
 -	while ((pid = wait3(&status, WNOHANG, 0)) > 0)
 -	        if (pid == child) {
 -			die = 1;
 -			if (WIFEXITED(status))
 -				e = WEXITSTATUS(status);
 -			else if (WIFSIGNALED(status))
 -				e = WTERMSIG(status);
 -			else /* can't happen */
 -				e = 1;
 -		}
 -
 -	if (die)
 +	if (waitpid(child, &status, 0) == child) {
 +		if (WIFEXITED(status))
 +			e = WEXITSTATUS(status);
 +		else if (WIFSIGNALED(status))
 +			e = WTERMSIG(status);
 +		else /* can't happen */
 +			e = 1;
  		done(e);
 +	}
  }
  
  void
 _______________________________________________
 svn-src-all@freebsd.org mailing list
 http://lists.freebsd.org/mailman/listinfo/svn-src-all
 To unsubscribe, send any mail to "svn-src-all-unsubscribe@freebsd.org"
 



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201004302240.o3UMe9ug013162>