Shortcut cursig when called during sleep setup.
authorclaudio <claudio@openbsd.org>
Thu, 17 Oct 2024 09:11:35 +0000 (09:11 +0000)
committerclaudio <claudio@openbsd.org>
Thu, 17 Oct 2024 09:11:35 +0000 (09:11 +0000)
commit3b30ff2ab7969af0fd9a5f043abb71c2592340bb
tree92fff0735b4deeb55083029a751a7360bd671fee
parent2ffeb134b3a95581bb5da541c1ecc54d776663a9
Shortcut cursig when called during sleep setup.

Add deep flag as function argument which is used by the sleep API but
nowhere else. Both calls to sleep_signal_check() should skip the ugly
bits of cursig().

In cursig() if deep once it is clear a signal will be taken keep the
signal on the thread siglist and return. sleep_signal_check() will then
return EINTR or ERESTART based on the signal context.  There is no reason
to do more in this special case. Especially stop/cont and the ptrace trap
must be skipped here. Once the call makes it to userret the signal will be
picked up again and handled in a safe location.

Stopping singals need some additional logic since we don't want to abort
the sleep just to stop a process. Since our SIGSTOP handling requires
a major rewrite this will be posponed until then.

OK mpi@
sys/kern/kern_sig.c
sys/kern/kern_synch.c
sys/sys/signalvar.h
sys/ufs/mfs/mfs_vfsops.c