...
POSIX is less restrictive than C99 about what applications can do in signal handlers. It has a long list of asynchronous-safe functions that can be called (see SIG30-C. Call only asynchronous-safe functions within signal handlers). Many of these functions set errno
on error. This can lead to a situation where a signal handler is executed in between a call to a failed function and the subsequent inspection of errno
, and consequently the value inspected is not the one set by that function but the one set by a function call in the signal handler. POSIX applications can avoid this problem by ensuring that signal handlers which contain code that might alter errno
always save the value of errno
on entry and restore it before returning.
...