summaryrefslogtreecommitdiff
path: root/lib/libc/sys/__thrsleep.2
diff options
context:
space:
mode:
Diffstat (limited to 'lib/libc/sys/__thrsleep.2')
-rw-r--r--lib/libc/sys/__thrsleep.2214
1 files changed, 214 insertions, 0 deletions
diff --git a/lib/libc/sys/__thrsleep.2 b/lib/libc/sys/__thrsleep.2
new file mode 100644
index 00000000000..5faacbca33d
--- /dev/null
+++ b/lib/libc/sys/__thrsleep.2
@@ -0,0 +1,214 @@
+.\" $OpenBSD: __thrsleep.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 __THRSLEEP 3
+.Os
+.Sh NAME
+.Nm __thrsleep ,
+.Nm __thrwakeup
+.Nd userspace thread sleep and wakeup
+.Sh SYNOPSIS
+.In sys/time.h
+.Ft int
+.Fn __thrsleep "const volatile void *id" "clockid_t clock_id" "const struct timespec *abstime" "void *lock" "const int *abort"
+.Ft int
+.Fn __thrwakeup "const volatile void *id" "int count"
+.Sh DESCRIPTION
+The
+.Fn __thrsleep
+and
+.Fn __thrwakeup
+functions provide thread sleep and wakeup primitives with which
+synchronization primitives such as mutexes and condition variables
+can be implemented.
+.Fn __thrsleep
+blocks the calling thread on the abstract
+.Dq wait channel
+identified by the
+.Fa id
+argument until another thread calls
+.Fn __thrwakeup
+with the same
+.Fa id
+value.
+If the
+.Fa abstime
+argument is not
+.Dv NULL ,
+then it specifies an absolute time,
+measured against the
+.Fa clock_id
+clock,
+after which
+.Fn __thrsleep
+should time out and return.
+If the specified time is in the past then
+.Fn __thrsleep
+will return immediately without blocking.
+.Pp
+The
+.Fa lock
+argument,
+if not
+.Dv NULL ,
+points to a locked spinlock that will be unlocked by
+.Fn __thrsleep
+atomically with respect to calls to
+.Fn __thrwakeup ,
+such that if another thread locks the spinlock before calling
+.Fn __thrwakeup
+with the same
+.Fa id ,
+then the thread that called
+.Fn __thrsleep
+will be eligible for being woken up and unblocked.
+.Pp
+The
+.Fa abort
+argument,
+if not
+.Dv NULL ,
+points to an
+.Vt int
+that will be examined after unlocking the spinlock pointed to by
+.Fa lock
+and immediately before blocking.
+If that
+.Vt int
+is non-zero then
+.Fn __thrsleep
+will immediately return
+.Er EINTR
+without blocking.
+This provides a mechanism for a signal handler to keep a call to
+.Fn __thrsleep
+from blocking,
+even if the signal is delivered immediately before the call.
+.Pp
+The
+.Fn __thrwakeup
+function unblocks one or more threads that are sleeping on the
+wait channel identified by
+.Fa id .
+The number of threads unblocked is specified by the
+.Fa count
+argument,
+except that if zero is specified then all threads sleeping on that
+.Fa id
+are unblocked.
+.Sh RETURN VALUES
+.Fn __thrsleep
+will return zero if woken by a matching call to
+.Fn __thrwakeup ,
+otherwise an error number will be returned to indicate the error.
+.Pp
+.Fn __thrwakeup
+will return zero if at least one matching call to
+.Fn __thrsleep
+was unblocked,
+otherwise an error number will be returned to indicate the error.
+.Sh ERRORS
+.Fn __thrsleep
+and
+.Fn __thrwakeup
+will fail if:
+.Bl -tag -width Er
+.It Bq Er EINVAL
+The
+.Fa ident
+argument is
+.Dv NULL .
+.It Bq Er ENOTSUP
+The kern.rthreads sysctl was not enabled.
+.El
+.Pp
+In addition,
+.Fn __thrsleep
+may return one of the following errors:
+.Bl -tag -width Er
+.It Bq Er EWOULDBLOCK
+The time specified by the
+.Fa abstime
+and
+.Fa clock_id
+arguments was reached.
+.It Bq Er EINTR
+A signal arrived or the
+.Fa abort
+argument pointed to a non-zero value.
+.It Bq Er EINVAL
+The
+.Fa clock_id
+argument is neither
+.Dv CLOCK_REALTIME
+nor
+.Dv CLOCK_MONOTONIC .
+.El
+.Pp
+.Fn __thrwakeup
+may return the following error:
+.Bl -tag -width Er
+.It Bq Er ESRCH
+No threads calling
+.Fn __thrsleep
+with the same
+.Fa id
+were found.
+.El
+.Sh SEE ALSO
+.Xr pthread_cond_wait 3 ,
+.Xr pthread_mutex_lock 3 ,
+.Xr tsleep 9
+.Sh STANDARDS
+The
+.Fn __thrsleep
+and
+.Fn __thrwakeup
+functions are specific to
+.Ox
+and should not be used in portable applications.
+.Sh HISTORY
+The
+.Fn thrsleep
+and
+.Fn thrwakeup
+syscalls appeared in
+.Ox 4.1 .
+The
+.Fa clock_id
+and
+.Fa abstime
+arguments were added in
+.Ox 4.9 .
+The functions were renamed to
+.Fn __thrsleep
+and
+.Fn __thrwakeup
+and the
+.Fa abort
+argument was added in
+.Ox 5.1
+.Sh AUTHORS
+.An -nosplit
+The
+.Fn thrsleep
+and
+.Fn thrwakeup
+syscalls were created by
+.An Ted Unangst Aq tedu@OpenBSD.org .
+This manual page was written by
+.An Philip Guenther Aq guenther@OpenBSD.org .