diff options
author | 2020-01-16 16:07:18 +0000 | |
---|---|---|
committer | 2020-01-16 16:07:18 +0000 | |
commit | 868b296a5ae44a38f3a23721464e90f185f3fd12 (patch) | |
tree | 6e6c648f10ab62bdcf082b69efd8a67220e3fdae /sys/dev/pci/drm/drm_linux.c | |
parent | Use list for freeing pages in uvn_flush() to optimize freeing chunks of (diff) | |
download | wireguard-openbsd-868b296a5ae44a38f3a23721464e90f185f3fd12.tar.xz wireguard-openbsd-868b296a5ae44a38f3a23721464e90f185f3fd12.zip |
turns out there WAS something fishy in signal handling in the "generic"
reaper. Specifically, the sigprocmask/wait/sigsuspend dance is correct for
the main process, BUT you have to remember to reset the signal mask to
something sane for the child (this was a duh! moment, that bug is very
stupid)
Finally, bluhm@ saw the actual issue. Kudoes to him.
The change to "unify" sequential and parallel make made the bug reproducible
under some circumstances
(because in the parallel make case, many things may happen in different
successions, so you don't get the wrong signal mask that often, but the
sequential case is reproducible, and using the "streamlined" reaper meant the
fork would occur WITHIN the signal loop instead of OUTSIDE)
So:
- discover signal state early on through Sigset_init;
- introduce reset_signal_mask to get back to the initial state;
- call reset_signal_mask systematically after fork
This organisation thanks to cmd_exec. SOME cmd_exec happens before Job_Init
happens, some afterwards (variables are still lazy and both !!= and :sh will
occur AFTER parsing), so both fork() need to be protected.
okay bluhm@
thx to sthen@ and naddy@ and mpi@ for helping out.
Diffstat (limited to 'sys/dev/pci/drm/drm_linux.c')
0 files changed, 0 insertions, 0 deletions