NetBSD Problem Report #35055

From www@NetBSD.org  Wed Nov 15 03:55:12 2006
Return-Path: <www@NetBSD.org>
Received: by narn.NetBSD.org (Postfix, from userid 31301)
	id 4D0AD63B400; Wed, 15 Nov 2006 03:55:12 +0000 (UTC)
Message-Id: <20061115035512.4D0AD63B400@narn.NetBSD.org>
Date: Wed, 15 Nov 2006 03:55:12 +0000 (UTC)
From: keiji@hiemalis.org
Reply-To: keiji@hiemalis.org
To: gnats-bugs@NetBSD.org
Subject: /bin/sh wait bug
X-Send-Pr-Version: www-1.0

>Number:         35055
>Category:       bin
>Synopsis:       /bin/sh wait bug
>Confidential:   no
>Severity:       serious
>Priority:       medium
>Responsible:    bin-bug-people
>State:          closed
>Class:          sw-bug
>Submitter-Id:   net
>Arrival-Date:   Wed Nov 15 04:00:00 +0000 2006
>Closed-Date:    Sun Dec 21 00:24:51 +0000 2008
>Last-Modified:  Sun Dec 21 00:24:51 +0000 2008
>Originator:     Wada Keiji
>Release:        3.99.15
>Organization:
>Environment:
NetBSD poker 3.99.15 NetBSD 3.99.15 (POKER-PCMCIA) #6: Sat Dec 31 03:03:42 JST 2005  root@poker:/home/NetBSD/src/sys/arch/i386/compile/POKER-PCMCIA i386
>Description:
please exec sh program
-----
#!/bin/sh
#!/emul/freebsd/bin/sh
sleep 3 &
sleep 1 &

wait %1
r1=$?
echo $r1
wait %2
r2=$?
echo $r2
-----
Both r1 and r2 should be 0.
But exec this sh program, r1 is 0, r2 is 127.

>How-To-Repeat:
exec sh program
#!/bin/sh
#!/emul/freebsd/bin/sh
sleep 3 &
sleep 1 &

wait %1
r1=$?
echo $r1
wait %2
r2=$?
echo $r2
>Fix:

>Release-Note:

>Audit-Trail:
From: dieter roelants <dieter.r@pandora.be>
To: gnats-bugs@NetBSD.org
Cc: keiji@hiemalis.org
Subject: Re: bin/35055: /bin/sh wait bug
Date: Sat, 25 Nov 2006 23:08:58 +0100

 > #!/bin/sh
 > #!/emul/freebsd/bin/sh
 > sleep 3 &
 > sleep 1 &
 > 
 > wait %1
 > r1=$?
 > echo $r1
 > wait %2
 > r2=$?
 > echo $r2
 > -----
 > Both r1 and r2 should be 0.

 Why do you think so? By the time the first wait returns, the second sleep has finished and so you don't have a job 2 anymore. 127 is the return value wait gives when you specify a non-existing child.

 > But exec this sh program, r1 is 0, r2 is 127.

 Seems right to me...


 Kind regards
 dieter

From: Wada Keiji <keiji@hiemalis.org>
To: gnats-bugs@NetBSD.org, dieter.r@pandora.be
Cc: keiji@hiemalis.org
Subject: Re: bin/35055: /bin/sh wait bug
Date: Sun, 26 Nov 2006 16:25:08 +0900 (JST)

 >>>>> On Sat, 25 Nov 2006 22:10:03 +0000 (UTC)
 >>>>> dieter.r@pandora.be(dieter roelants)  said:

 dieter.r> The following reply was made to PR bin/35055; it has been noted by GNATS.

 dieter.r> From: dieter roelants <dieter.r@pandora.be>
 dieter.r> To: gnats-bugs@NetBSD.org
 dieter.r> Cc: keiji@hiemalis.org
 dieter.r> Subject: Re: bin/35055: /bin/sh wait bug
 dieter.r> Date: Sat, 25 Nov 2006 23:08:58 +0100

 dieter.r>  > #!/bin/sh
 dieter.r>  > #!/emul/freebsd/bin/sh
 dieter.r>  > sleep 3 &
 dieter.r>  > sleep 1 &
 dieter.r>  > 
 dieter.r>  > wait %1
 dieter.r>  > r1=$?
 dieter.r>  > echo $r1
 dieter.r>  > wait %2
 dieter.r>  > r2=$?
 dieter.r>  > echo $r2
 dieter.r>  > -----
 dieter.r>  > Both r1 and r2 should be 0.

 dieter.r>  Why do you think so? By the time the first wait returns,
 dieter.r> the second sleep has finished and so you don't have a job 2
 dieter.r> anymore. 127 is the return value wait gives when you specify
 dieter.r> a non-existing child.

 I want to get second sleep(job) return value. But NetBSD's sh can't.
 FreeBSD's sh and zsh give me second sleep(job) return value.

 dieter.r>  > But exec this sh program, r1 is 0, r2 is 127.

 dieter.r>  Seems right to me...

 I don't know what is right. But this sh program action is different
 between NetBSD and FreeBSD.

 Thanks.

From: David Laight <david@l8s.co.uk>
To: gnats-bugs@NetBSD.org
Cc: 
Subject: Re: bin/35055: /bin/sh wait bug
Date: Sun, 26 Nov 2006 18:52:29 +0000

 On Sun, Nov 26, 2006 at 07:30:03AM +0000, Wada Keiji wrote:
 >  
 >  dieter.r>  > #!/bin/sh
 >  dieter.r>  > #!/emul/freebsd/bin/sh
 >  dieter.r>  > sleep 3 &
 >  dieter.r>  > sleep 1 &
 >  dieter.r>  > 
 >  dieter.r>  > wait %1
 >  dieter.r>  > r1=$?
 >  dieter.r>  > echo $r1
 >  dieter.r>  > wait %2
 >  dieter.r>  > r2=$?
 >  dieter.r>  > echo $r2
 >  dieter.r>  > -----
 >  dieter.r>  > Both r1 and r2 should be 0.
 >   
 >  dieter.r>  Why do you think so? By the time the first wait returns,
 >  dieter.r> the second sleep has finished and so you don't have a job 2
 >  dieter.r> anymore. 127 is the return value wait gives when you specify
 >  dieter.r> a non-existing child.

 I've just read the SUS spec
 http://www.opengroup.org/onlinepubs/009695399/utilities/wait.html
 It states: This volume of IEEE Std 1003.1-2001 requires the implementation
 to keep the status of terminated jobs available until the status is requested

 	David

 -- 
 David Laight: david@l8s.co.uk

From: Christos Zoulas <christos@netbsd.org>
To: gnats-bugs@gnats.NetBSD.org
Cc: 
Subject: PR/35055 CVS commit: src/bin/sh
Date: Sun, 21 Dec 2008 00:19:59 +0000 (UTC)

 Module Name:	src
 Committed By:	christos
 Date:		Sun Dec 21 00:19:59 UTC 2008

 Modified Files:
 	src/bin/sh: jobs.c

 Log Message:
 PR/35055: Wada Keiji: wait did not keep the status of terminated jobs as
 expected.


 To generate a diff of this commit:
 cvs rdiff -r1.66 -r1.67 src/bin/sh/jobs.c

 Please note that diffs are not public domain; they are subject to the
 copyright notices on the relevant files.

State-Changed-From-To: open->closed
State-Changed-By: christos@NetBSD.org
State-Changed-When: Sat, 20 Dec 2008 19:24:51 -0500
State-Changed-Why:
fixed, thanks


>Unformatted:

NetBSD Home
NetBSD PR Database Search

(Contact us) $NetBSD: query-full-pr,v 1.39 2013/11/01 18:47:49 spz Exp $
$NetBSD: gnats_config.sh,v 1.8 2006/05/07 09:23:38 tsutsui Exp $
Copyright © 1994-2007 The NetBSD Foundation, Inc. ALL RIGHTS RESERVED.