On Sun, Oct 14, 2012 at 1:07 AM, Philip Guenther <[email protected]> wrote: > On Sat, Oct 13, 2012 at 9:38 PM, David Higgs <[email protected]> wrote: >> Signal delivery can be nested/reentrant. Calling raise(3) in a signal >> handler -- even with the same signal number -- will work as expected >> (until you blow your stack). > > By default, a signal is deferred when the signal itself is being > handled; c.f. the SA_NODEFER flag on the sigaction(2) manpage. If > that isn't set then raising the signal in its own signal handler will > just result in it being pending until you return from the signal > handler, at which point the signal mask will be restored and the > pending signal will be delivered. (That's specified by POSIX.) > > >> What I'm not sure about is when multiple, identical signals arrive >> *before* the signal handler is invoked. A naive interpretation of >> sigpending(2) suggests only one of each signal can be pending at a >> time. However, the kernel could place multiple signal contexts on the >> stack before invoking any handlers, and then userland will process >> them in LIFO order. > > OpenBSD doesn't support signal queuing; a signal sent to a process > while that signal is already pending for the process will be ignored.
Very informative, thank you. --david

