CVSROOT:        /cvs
Module name:    src
Changes by:     v...@cvs.openbsd.org    2020/08/25 21:16:53

Modified files:
        sys/kern       : kern_sig.c 

Log message:
Fix a race in single-thread mode switching

Extend the scope of SCHED_LOCK() to better synchronize
single_thread_set(), single_thread_clear() and single_thread_check().
This prevents threads from suspending before single_thread_set() has
finished. If a thread suspended early, ps_singlecount might get
decremented too much, which in turn could make single_thread_wait()
get stuck.

The race could be triggered for example by trying to stop
a multithreaded process with a debugger. When triggered, the race
prevents the debugger from finishing a wait4(2) call on the debuggee.
This kind of gdb hang was reported by Julian Smith on misc@.

Unfortunately, single-thread mode switching still has issues and hangs
are still possible.

OK mpi@

Reply via email to