Bug 218598 - pwait deadlocks on its own pid
Summary: pwait deadlocks on its own pid
Status: Open
Alias: None
Product: Base System
Classification: Unclassified
Component: bin (show other bugs)
Version: CURRENT
Hardware: Any Any
: --- Affects Only Me
Assignee: freebsd-bugs (Nobody)
Keywords: patch
Depends on:
Reported: 2017-04-12 16:23 UTC by Dan McGregor
Modified: 2017-09-23 20:25 UTC (History)
4 users (show)

See Also:

Patch to not wait on our own pid. (1.22 KB, patch)
2017-04-12 16:23 UTC, Dan McGregor
no flags Details | Diff

Note You need to log in before you can comment on or make changes to this bug.
Description Dan McGregor 2017-04-12 16:23:33 UTC
Created attachment 181726 [details]
Patch to not wait on our own pid.

pwait will deadlock when passed its own PID. I experienced this when kern.randompid was set with poudriere. The code was more or less this:

pwait $!

if do_the_thing ends before pwait starts, and do_the_thing and pwait get the same pid, pwait waits indefinitely.

I've attached a patch to warn and exit immediately if pwait is told to wait on its own pid.
Comment 1 Jilles Tjoelker freebsd_committer 2017-04-12 22:02:23 UTC
Hmm, this is sort of a workaround for the shell reaping zombies quickly and not providing the script with a good way to detect this.

If code is executed like
  sh -c '...; exec pwait $$'
it arguably should deadlock.

The patch seems a simple way to avoid the deadlock in poudriere, though.
Comment 2 Dan McGregor 2017-04-20 15:59:50 UTC
(In reply to Jilles Tjoelker from comment #1)

Yeah, a literal reading of the documentation implies that it should hang. Personally I'd interpret pwait's own PID as invalid, though that's up for debate.
Comment 3 op 2017-09-23 20:25:37 UTC
Is there any update regarding on this bug?