Unlock dosigsuspend() and with that some aspects of ppoll and pselect
authorclaudio <claudio@openbsd.org>
Wed, 10 Apr 2024 10:05:26 +0000 (10:05 +0000)
committerclaudio <claudio@openbsd.org>
Wed, 10 Apr 2024 10:05:26 +0000 (10:05 +0000)
commita2f40c7d565e0cf83267ba9164c73040b47a3cc5
tree3b8596c91778867813c97bcbb2c142074b685495
parent8768446ca08b6a4eb24335c9c27b50cc7633d1ee
Unlock dosigsuspend() and with that some aspects of ppoll and pselect

Change p_sigmask from atomic back to non-atomic updates. All changes to
p_sigmask are only allowed by curproc (the owner). There is no need for
atomic instructions here.

p_sigmask is mostly accessed by curproc with the exception of ptsignal().
In ptsignal() p_sigmask is now only read once unless a SSLEEP proc gets
the signal. In that case recheck the p_sigmask before wakeup to ensure
that no unnecessary wakeup happens.

Add some KASSERT(p == curproc) to ensure this precondition.
sigabort() is special since it is also called by ddb but apart from that
only works for curproc.

With and OK mvs@ OK mpi@
sys/kern/kern_sig.c
sys/kern/sys_generic.c
sys/sys/proc.h