SignalSuspend(), SignalSuspend_r()
Suspend a thread until a signal is received
Synopsis:
#include <sys/neutrino.h>
int SignalSuspend( const sigset_t* set );
int SignalSuspend_r( const sigset_t* set );
Arguments:
- set
- A pointer to a sigset_t object that specifies the signals you want to wait for.
Library:
libc
Use the -l c option to qcc to link against this library. This library is usually included automatically.
Description:
These kernel calls replace the thread's signal mask with the set of signals pointed to by set and then suspends the thread until delivery of a signal whose action is either to execute a signal-catching function (then return), or to terminate the thread. On return, the previous signal mask is restored.
The SignalSuspend() and SignalSuspend_r() functions are identical, except in the way they indicate errors. See the Returns section for details.
Attempts to block SIGKILL or SIGSTOP are ignored. This is done without causing an error.
If you're using SignalSuspend() to synchronously wait for a signal, consider using the more efficient POSIX sigwaitinfo() call.
Blocking states
- STATE_SIGSUSPEND
- The calling thread blocks waiting for a signal.
Returns:
Since SignalSuspend() and SignalSuspend_r() block until interrupted, there's no successful return value:
- SignalSuspend() always returns -1 and sets errno.
- SignalSuspend_r() always returns a value in the Errors section and doesn't set errno.
If the signal handler calls longjmp() or siglongjmp(), SignalSuspend() and SignalSuspend_r() don't return.
Errors:
- EINTR
- The call was interrupted by a signal (this is the normal error).
- EFAULT
- A fault occurred when the kernel tried to access the buffers provided.
- ETIMEDOUT
- A kernel timeout unblocked the call. See TimerTimeout().
Classification:
Safety: | |
---|---|
Cancellation point | Yes |
Signal handler | Yes |
Thread | Yes |