This procedure puts the calling task into wait state until any of the signal(s) specified in the sigMask have been received. When a task is in wait state, it uses no CPU time.
When WaitSignal() returns, bits set in the result indicate which of the signal(s) the task was waiting for were received since the last call to WaitSignal(). (The SIGF_ABORTED bit is also set if that signal was received, even if it is not in the signal mask.) If the task was not waiting for certain signals, the bits for those signals remain set in the task's signal word, and all other bits in the signal word are cleared.
See AllocSignal() for a description of the implementation of signals.
Arguments
sigMask
A mask in which bits are set to specify the signals the task wants to wait for.
Return Value
The procedure returns a mask that specifies which of the signal(s) a task was waiting for have been received or an error code (a negative value) if an error occurs. Possible error codes include:
ILLEGALSIGNAL
One or more of the signal bits in the sigMask argument was not allocated by the task.
Implementation
SWI implemented in kernel folio V20.
Associated Files
task.h
ANSI C Prototype
Notes
Because it is possible for tasks to send signals in error, it is up to tasks to confirm that the actual event occurred when they receive a signal.
For example, if you were waiting for SIGF_IODONE and the return value from WaitSignal indicated that the signal was sent, you should still call CheckIO using the IOReq to make sure it is actually done. If it was not done you should go back to WaitSignal.