summaryrefslogtreecommitdiff
path: root/lib/libc/sys/__thrsigdivert.2
diff options
context:
space:
mode:
Diffstat (limited to 'lib/libc/sys/__thrsigdivert.2')
-rw-r--r--lib/libc/sys/__thrsigdivert.2128
1 files changed, 128 insertions, 0 deletions
diff --git a/lib/libc/sys/__thrsigdivert.2 b/lib/libc/sys/__thrsigdivert.2
new file mode 100644
index 00000000000..085ab64687a
--- /dev/null
+++ b/lib/libc/sys/__thrsigdivert.2
@@ -0,0 +1,128 @@
+.\" $OpenBSD: __thrsigdivert.2,v 1.1 2012/03/13 15:55:46 guenther Exp $
+.\"
+.\" Copyright (c) 2012 Philip Guenther <guenther@openbsd.org>
+.\"
+.\" Permission to use, copy, modify, and distribute this software for any
+.\" purpose with or without fee is hereby granted, provided that the above
+.\" copyright notice and this permission notice appear in all copies.
+.\"
+.\" THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+.\" WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+.\" MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+.\" ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+.\" WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+.\" ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+.\" OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+.\"
+.Dd $Mdocdate: March 13 2012 $
+.Dt __THRSIGDIVERT 3
+.Os
+.Sh NAME
+.Nm __thrsigdivert
+.Nd synchronously accept a signal
+.Sh SYNOPSIS
+.In sys/signal.h
+.In sys/time.h
+.Ft int
+.Fn __thrsigdivert "sigset_t set" "siginfo_t *info" "const struct timespec *timeout"
+.Sh DESCRIPTION
+The
+.Fn __thrsigdivert
+function is used to implement
+.Fn sigwait .
+It selects a signal pending for the calling thread or process from
+.Fa set ,
+atomically clears it from that set of pending signals,
+and returns that signal number.
+If prior to the call to
+.Fn __thrsigdivert
+there are multiple pending instances of a single signal number,
+it is undefined whether upon successful return there are any remaining
+pending signals for that signal number.
+If no signal in
+.Fa set
+is pending at the time of the call,
+the thread shall be suspended until one or more becomes pending.
+The signals defined by
+.Fa set
+should have been blocked in all threads in the process at the time
+of the call to
+.Fn __thrsigdivert ;
+otherwise the signal may be delivered to some thread that does not
+have it blocked.
+.Pp
+If more than one thread is using
+.Fn __thrsigdivert
+to wait for the same signal,
+no more than one of these threads shall return from
+.Fn __thrsigdivert
+for any given signal that is sent.
+Which thread returns from
+.Fn __thrsigdivert
+if more than a single thread is waiting is unspecified.
+.Pp
+If the
+.Fa info
+argument is not
+.Dv NULL ,
+then a
+.Vt siginfo_t
+will be stored there which has the selected signal number in its
+.Fa si_signo
+member and the cause of the signal in its
+.Fa si_code
+member.
+.Pp
+If the
+.Fa timeout
+argument is not
+.Dv NULL
+and no selected signal is currently pending,
+then
+.Fn __thrsigdivert
+will wait no longer than the specified time period for a signal to
+arrive before failing.
+.Sh RETURN VALUES
+If successful,
+the number of the signal that was accepted is returned.
+Otherwise, a value of -1 is returned and
+.Dv errno
+is set to indicate the error.
+.Sh ERRORS
+.Fn __thrsigdivert
+will succeed unless:
+.Bl -tag -width Er
+.It Bq Er EWOULDBLOCK
+The timeout was reached before a selected signal was received.
+.It Bq Er ENOTSUP
+The kern.rthreads sysctl was not enabled.
+.El
+.Sh SEE ALSO
+.Xr sigaction 2 ,
+.Xr sigprocmask 2 ,
+.Xr sigwait 3
+.Sh STANDARDS
+The
+.Fn __thrsigdivert
+function is specific to
+.Ox
+and should not be used in portable applications.
+.Sh HISTORY
+The
+.Fn __thrsigdivert
+function appeared in
+.Ox 3.? .
+The
+.Fa info
+and
+.Fa timeout
+arguments were added in
+.Ox 4.9 .
+.Sh AUTHORS
+.An -nosplit
+The
+.Fn thrsigdivert
+syscall was created by
+.An Ted Unangst Aq tedu@OpenBSD.org .
+This manual page was written by
+.An Philip Guenther Aq guenther@OpenBSD.org .