
notify_perror() prints the string str, followed by a colon, and followed by a string
that describes notify_errno to stderr.
20.14 Issues
Here are some additional issues surrounding the Notifier:
• The layer over the UNIX signal mechanism is not complete. Signal blocking (sigblock
(2)) can still be done safely in the flow of control of a client to protect critical portions of
code as long as the previous signal mask is restored before returning to the Notifier.
Signal pausing (sigpause (2)) is essentially done by the Notifier. Signal masking
(sigmask (2)) can be accomplished via multiple notify_set_ signal_func()
calls. Setting up a process signal stack (sigstack (2)) can still be done. Setting the
signal catcher mask and on-signal-stack flag (sigvec (2)) could be done by reaching
around the Notifier, but this is not supported.
• Not all process resources are multiplexed (e.g., rlimit (2), setjmp (2), umask
(2), setquota (2), and setpriority (2)), only ones that have to do with flow
of control multiplexing. Thus, some level of cooperation and understanding needs to
exist among packages in the single process.
• One might intercept
close (2) and dup (2) calls so that the Notifier is not waiting on
invalid or incorrect file descriptors if a client forgets to remove its conditions from the
Notifier before making these calls.
• One might intercept signal (3) and sigvec (2) calls so that the Notifier does not get ...