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

Reply via email to