Move the P_WEXIT check from lwpsignal() to kern_kill(). That is, disallow
authorMatthew Dillon <dillon@dragonflybsd.org>
Sat, 30 Jun 2007 02:33:04 +0000 (02:33 +0000)
committerMatthew Dillon <dillon@dragonflybsd.org>
Sat, 30 Jun 2007 02:33:04 +0000 (02:33 +0000)
commit73e40cb275c649dd363954272e3e2f8db04a4e08
tree0c6d9ba4c968ec7460ad6294427e4bd3041aebc8
parent9caa806a14eb1ab2e76e711c7ce4a81d63a532c7
Move the P_WEXIT check from lwpsignal() to kern_kill().  That is, disallow
signals to exiting processes but allow signals to threads that have not gone
through the exit interlock yet.  This allows exit1() to interlock the process
and still signal its LWPs.

Fix a bug in exit1() which was improperly using lwp_signotify() to wake up
LWPs to force the to exit.  This function is basically a NOP if there are
no signals pending to the LWP.  Send a real SIGKILL to the LWP instead.

This fixes a bug where vkernels get stuck in an exiting state and cannot be
killed.

Reported-by: Joe Talbott <josepht@cstone.net>
sys/kern/kern_exit.c
sys/kern/kern_sig.c