Switch to SpeakEasy.net DSL

The Modular Manual Browser

Home Page
Manual: (OpenBSD-5.7)
Apropos / Subsearch:
optional field

__THRSIGDIVERT(3)        BSD Library Functions Manual        __THRSIGDIVERT(3)

     __thrsigdivert -- synchronously accept a signal

     #include <&lt;sys/signal.h>&gt;
     #include <&lt;sys/time.h>&gt;

     __thrsigdivert(sigset_t set, siginfo_t *info,
         const struct timespec *timeout);

     The __thrsigdivert() function is used to implement sigwait().  It selects
     a signal pending for the calling thread or process from set, atomically
     clears it from that set of pending signals, and returns that signal num-
     ber.  If prior to the call to __thrsigdivert() there are multiple pending
     instances of a single signal number, it is undefined whether upon suc-
     cessful return there are any remaining pending signals for that signal
     number.  If no signal in set is pending at the time of the call, the
     thread shall be suspended until one or more becomes pending.  The signals
     defined by set should have been blocked in all threads in the process at
     the time of the call to __thrsigdivert(); otherwise the signal may be
     delivered to some thread that does not have it blocked.

     If more than one thread is using __thrsigdivert() to wait for the same
     signal, no more than one of these threads shall return from
     __thrsigdivert() for any given signal that is sent.  Which thread returns
     from __thrsigdivert() if more than a single thread is waiting is unspeci-

     If the info argument is not NULL, then a siginfo_t will be stored there
     which has the selected signal number in its si_signo member and the cause
     of the signal in its si_code member.

     If the timeout argument is not NULL and no selected signal is currently
     pending, then __thrsigdivert() will wait no longer than the specified
     time period for a signal to arrive before failing.

     If successful, the number of the signal that was accepted is returned.
     Otherwise, a value of -1 is returned and errno is set to indicate the

     __thrsigdivert() will succeed unless:

     [EWOULDBLOCK]      The timeout was reached before a selected signal was

     sigaction(2), sigprocmask(2), sigwait(3)

     The __thrsigdivert() function is specific to OpenBSD and should not be
     used in portable applications.

     A thrsigdivert() syscall appeared in OpenBSD 3.9.  The info and timeout
     arguments were added in OpenBSD 4.9.

     The thrsigdivert() syscall was created by Ted Unangst <tedu@OpenBSD.org>.
     This manual page was written by Philip Guenther <guenther@OpenBSD.org>.

BSD                             March 30, 2017                             BSD