(libc.info.gz) Why Block
Info Catalog
(libc.info.gz) Blocking Signals
(libc.info.gz) Signal Sets
24.7.1 Why Blocking Signals is Useful
-------------------------------------
Temporary blocking of signals with 'sigprocmask' gives you a way to
prevent interrupts during critical parts of your code. If signals
arrive in that part of the program, they are delivered later, after you
unblock them.
One example where this is useful is for sharing data between a signal
handler and the rest of the program. If the type of the data is not
'sig_atomic_t' ( Atomic Data Access), then the signal handler
could run when the rest of the program has only half finished reading or
writing the data. This would lead to confusing consequences.
To make the program reliable, you can prevent the signal handler from
running while the rest of the program is examining or modifying that
data--by blocking the appropriate signal around the parts of the program
that touch the data.
Blocking signals is also necessary when you want to perform a certain
action only if a signal has not arrived. Suppose that the handler for
the signal sets a flag of type 'sig_atomic_t'; you would like to test
the flag and perform the action if the flag is not set. This is
unreliable. Suppose the signal is delivered immediately after you test
the flag, but before the consequent action: then the program will
perform the action even though the signal has arrived.
The only way to test reliably for whether a signal has yet arrived is
to test while the signal is blocked.
Info Catalog
(libc.info.gz) Blocking Signals
(libc.info.gz) Signal Sets
automatically generated by
info2html