David Xu wrote:
davidxu 2006-02-15 23:52:01 UTC
FreeBSD src repository
Modified files:
sys/sys proc.h sleepqueue.h
sys/kern kern_condvar.c kern_kse.c kern_sig.c
kern_synch.c kern_thread.c
subr_sleepqueue.c
Log:
Fix a long standing race between sleep queue and thread
suspension code. When a thread A is going to sleep, it calls
sleepq_catch_signals() to detect any pending signals or thread
suspension request, if nothing happens, it returns without
holding process lock or scheduler lock, this opens a race
window which allows thread B to come in and do process
suspension work, however since A is still at running state,
thread B can do nothing to A, thread A continues, and puts
itself into actually sleeping state, but B has never seen it,
and it sits there forever until B is woken up by other threads
Should be "until thread A is woken up ... ", sigh!
_______________________________________________
cvs-all@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/cvs-all
To unsubscribe, send any mail to "[EMAIL PROTECTED]"