DragonFly commits List (threaded) for 2007-02
cvs commit: src/sys/kern kern_sig.c
corecode 2007/02/22 07:48:55 PST
DragonFly src repository
Fix stopping of the current process, which was broken by the last commit.
If the current process is still far inside the kernel and is going to
tsleep(), CURSIG()/issignal() in tsleep() have to see the pending signal;
holding the process in SSTOP is not enough.
However, if this is happening to a process which already received a stopping
signal and thus already is in SSTOP, but which wakes up for some reason, and
then posts a SA_STOP signal to itself, we may not ignore this, in spite of
already being in SSTOP.
All this process stopping business inside CURSIG()/issignal() makes all of
this very fragile, but we will have to live with it for now.
The bug can be reproduced by doing
% ps lx|grep '[c]at'
The correct output would be something like:
4156 stop p2 DL 0:00.00 cat
The broken behavior shows with:
17417 ttybg2 p2 TL 0:00.00 cat
Reviewed-by: Thomas E. Spanjaard <email@example.com>
Revision Changes Path
1.70 +8 -2 src/sys/kern/kern_sig.c