Replace SIGCHLD/notify_pipe kludge with pselect.
authordtucker <dtucker@openbsd.org>
Fri, 25 Jun 2021 03:38:17 +0000 (03:38 +0000)
committerdtucker <dtucker@openbsd.org>
Fri, 25 Jun 2021 03:38:17 +0000 (03:38 +0000)
commitc738d2f7f6935f25f4f96171080f774f172f3e5a
tree7fda48b53c076e8768032bbc94571280d4c97524
parent738f17d1799542a46a3dcbc375a64e643c693e9f
Replace SIGCHLD/notify_pipe kludge with pselect.

Previously sshd's SIGCHLD handler would wake up select() by writing a
byte to notify_pipe.  We can remove this by blocking SIGCHLD, checking
for child terminations then passing the original signal mask through
to pselect.  This ensures that the pselect will immediately wake up if
a child terminates between wait()ing on them and the pselect.

In -portable, for platforms that do not have pselect the kludge is still
there but is hidden behind a pselect interface.

Based on other changes for bz#2158, ok djm@
usr.bin/ssh/serverloop.c