From: Harald van Dijk <harald@gigawatt.nl>
To: Robert Elz <kre@munnari.OZ.AU>, Martijn Dekker <martijn@inlv.org>
Cc: DASH shell mailing list <dash@vger.kernel.org>,
busybox <busybox@busybox.net>,
Bug reports for the GNU Bourne Again SHell <bug-bash@gnu.org>,
Jilles Tjoelker <jilles@stack.nl>
Subject: Re: Bizarre interaction bug involving bash w/ lastpipe + Almquist 'wait'
Date: Sat, 8 Feb 2020 18:39:38 +0000 [thread overview]
Message-ID: <2b436500-671b-b143-a4bb-2230f157e1b7@gigawatt.nl> (raw)
In-Reply-To: <5461.1581043287@jinx.noi.kre.to>
On 07/02/2020 02:41, Robert Elz wrote:
> Date: Thu, 6 Feb 2020 16:12:06 +0000
> From: Martijn Dekker <martijn@inlv.org>
> Message-ID: <10e3756b-5e8f-ba00-df0d-b36c93fa2281@inlv.org>
>
> | NetBSD sh behaves differently. NetBSD 8.1 sh (as installed on sdf.org
> | and sdf-eu.org) seem to act completely normally, but NetBSD 9.0rc2 sh
> | (on my VirtualBox test VM) segfaults. Output on NetBSD 9.0rc2:
>
> I have updated my opinion on that, I think it is "don't have the bug",
> though it is possible a blocked SIGCHLD acts differently on NetBSD than
> on other systems. On NetBSD it seems to affect nothing (the shell does
> not rely upon receiving SIGCHLD so not getting it is irrelevant) and
> the wait code when given an arg (as your script did) would always wait
> until that process exited, and return as soon as it did.
I think you're right that this isn't SIGCHLD behaving differently on
NetBSD, it's that NetBSD sh does not have the same problem the other
ash-based shells do. The problem is with sigsuspend, which in dash looks
like:
> sigblockall(&oldmask);
>
> while (!gotsigchld && !pending_sig)
> sigsuspend(&oldmask);
>
> sigclearmask();
<https://git.kernel.org/pub/scm/utils/dash/dash.git/tree/src/jobs.c?id=f30bd155ccbc3f084bbf03d56f9cc43f4b02af2a#n1170>
This clearly cannot work when oldmask blocks SIGCHLD.
NetBSD sh does not use sigsuspend here, so avoids that problem.
I changed gwsh to call sigclearmask() on shell startup, but plan to
check whether this loop is really necessary at some later time. It was
added to dash to fix a race condition, where that race condition was
apparently introduced by a fix for another race condition. If NetBSD sh
manages to avoid this pattern, and assuming NetBSD sh is not still
susceptible to one of those race conditions, the fix for it in the other
shells would seem to be more complicated than necessary, and simplifying
things would be good.
Cheers,
Harald van Dijk
next prev parent reply other threads:[~2020-02-08 18:41 UTC|newest]
Thread overview: 12+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-02-06 16:12 Bizarre interaction bug involving bash w/ lastpipe + Almquist 'wait' Martijn Dekker
2020-02-06 19:29 ` Harald van Dijk
2020-02-07 11:19 ` AW: " Walter Harms
2020-02-07 14:33 ` Martijn Dekker
2020-02-07 16:16 ` Chet Ramey
2020-02-06 20:43 ` Robert Elz
2020-02-07 2:41 ` Robert Elz
2020-02-08 18:39 ` Harald van Dijk [this message]
2020-02-09 19:03 ` Jilles Tjoelker
2020-02-18 16:46 ` Denys Vlasenko
2020-02-18 21:59 ` Harald van Dijk
2020-02-18 18:17 ` Robert Elz
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=2b436500-671b-b143-a4bb-2230f157e1b7@gigawatt.nl \
--to=harald@gigawatt.nl \
--cc=bug-bash@gnu.org \
--cc=busybox@busybox.net \
--cc=dash@vger.kernel.org \
--cc=jilles@stack.nl \
--cc=kre@munnari.OZ.AU \
--cc=martijn@inlv.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).