Updated: April 19, 2023 |
Block a set of signals and then select a pending signal
#include <sys/neutrino.h> int SignalWaitinfoMask( const sigset_t* set, siginfo_t* info, const sigset_t *mask ); int SignalWaitinfoMask_r( const sigset_t* set, siginfo_t* info, const sigset_t *mask );
libc
Use the -l c option to qcc to link against this library. This library is usually included automatically.
The SignalWaitinfoMask() and SignalWaitinfoMask_r() kernel calls block the signals specified by mask and then select the pending signal from the set specified by set. If no signal in set is pending at the time of the call, the thread blocks until one or more signals in set become pending or until interrupted by an unblocked, caught signal. These functions unblock the signals specified by mask before returning.
These functions are identical except in the way they indicate errors. See the Returns section for details.
These kernel calls are similar to SignalWaitinfo() and SignalWaitinfo_r() but avoid the race condition between blocking signals, potentially getting a signal, and then blocking while waiting for that signal.
If the info argument isn't NULL, information on the selected signal is stored there as follows:
siginfo_t member | Description |
---|---|
si_signo | Selected signal number |
si_code | Signal code |
si_value | Signal value |
If, while SignalWaitinfoMask() is waiting, a caught signal occurs that isn't blocked, the signal handler is invoked and SignalWaitinfoMask() is interrupted with an error of EINTR.
Blocking states
A signal number. If an error occurs:
Safety: | |
---|---|
Cancellation point | Yes |
Interrupt handler | No |
Signal handler | Yes |
Thread | Yes |