summaryrefslogtreecommitdiffstats
path: root/upstream/archlinux/man3p/pthread_setcancelstate.3p
diff options
context:
space:
mode:
Diffstat (limited to 'upstream/archlinux/man3p/pthread_setcancelstate.3p')
-rw-r--r--upstream/archlinux/man3p/pthread_setcancelstate.3p174
1 files changed, 174 insertions, 0 deletions
diff --git a/upstream/archlinux/man3p/pthread_setcancelstate.3p b/upstream/archlinux/man3p/pthread_setcancelstate.3p
new file mode 100644
index 00000000..aa969946
--- /dev/null
+++ b/upstream/archlinux/man3p/pthread_setcancelstate.3p
@@ -0,0 +1,174 @@
+'\" et
+.TH PTHREAD_SETCANCELSTATE "3P" 2017 "IEEE/The Open Group" "POSIX Programmer's Manual"
+.\"
+.SH PROLOG
+This manual page is part of the POSIX Programmer's Manual.
+The Linux implementation of this interface may differ (consult
+the corresponding Linux manual page for details of Linux behavior),
+or the interface may not be implemented on Linux.
+.\"
+.SH NAME
+pthread_setcancelstate,
+pthread_setcanceltype,
+pthread_testcancel
+\(em set cancelability state
+.SH SYNOPSIS
+.LP
+.nf
+#include <pthread.h>
+.P
+int pthread_setcancelstate(int \fIstate\fP, int *\fIoldstate\fP);
+int pthread_setcanceltype(int \fItype\fP, int *\fIoldtype\fP);
+void pthread_testcancel(void);
+.fi
+.SH DESCRIPTION
+The
+\fIpthread_setcancelstate\fR()
+function shall atomically both set the calling thread's cancelability
+state to the indicated
+.IR state
+and return the previous cancelability state at the location referenced
+by
+.IR oldstate .
+Legal values for
+.IR state
+are PTHREAD_CANCEL_ENABLE and PTHREAD_CANCEL_DISABLE.
+.P
+The
+\fIpthread_setcanceltype\fR()
+function shall atomically both set the calling thread's cancelability
+type to the indicated
+.IR type
+and return the previous cancelability type at the location referenced
+by
+.IR oldtype .
+Legal values for
+.IR type
+are PTHREAD_CANCEL_DEFERRED and PTHREAD_CANCEL_ASYNCHRONOUS.
+.P
+The cancelability state and type of any newly created threads,
+including the thread in which
+\fImain\fR()
+was first invoked, shall be PTHREAD_CANCEL_ENABLE and
+PTHREAD_CANCEL_DEFERRED respectively.
+.P
+The
+\fIpthread_testcancel\fR()
+function shall create a cancellation point in the calling thread. The
+\fIpthread_testcancel\fR()
+function shall have no effect if cancelability is disabled.
+.SH "RETURN VALUE"
+If successful, the
+\fIpthread_setcancelstate\fR()
+and
+\fIpthread_setcanceltype\fR()
+functions shall return zero; otherwise, an error number shall be
+returned to indicate the error.
+.SH ERRORS
+The
+\fIpthread_setcancelstate\fR()
+function may fail if:
+.TP
+.BR EINVAL
+The specified state is not PTHREAD_CANCEL_ENABLE or
+PTHREAD_CANCEL_DISABLE.
+.P
+The
+\fIpthread_setcanceltype\fR()
+function may fail if:
+.TP
+.BR EINVAL
+The specified type is not PTHREAD_CANCEL_DEFERRED or
+PTHREAD_CANCEL_ASYNCHRONOUS.
+.P
+These functions shall not return an error code of
+.BR [EINTR] .
+.LP
+.IR "The following sections are informative."
+.SH EXAMPLES
+None.
+.SH "APPLICATION USAGE"
+In order to write a signal handler for an asynchronous signal which
+can run safely in a cancellable thread,
+\fIpthread_setcancelstate\fR()
+must be used to disable cancellation for the duration of any calls
+that the signal handler makes which are cancellation points. However,
+the standard does not permit strictly conforming applications to call
+\fIpthread_setcancelstate\fR()
+from a signal handler since it is not currently required to be
+async-signal-safe. On implementations where
+\fIpthread_setcancelstate\fR()
+is not async-signal-safe, alternatives are to ensure either that the
+corresponding signals are blocked during execution of functions that
+are not async-cancel-safe or that cancellation is disabled during
+times when those signals could be delivered. Implementations are
+strongly encouraged to make
+\fIpthread_setcancelstate\fR()
+async-signal-safe.
+.SH RATIONALE
+The
+\fIpthread_setcancelstate\fR()
+and
+\fIpthread_setcanceltype\fR()
+functions control the points at which a thread may be
+asynchronously canceled. For cancellation control to be usable in
+modular fashion, some rules need to be followed.
+.P
+An object can be considered to be a generalization of a procedure. It
+is a set of procedures and global variables written as a unit and
+called by clients not known by the object. Objects may depend on other
+objects.
+.P
+First, cancelability should only be disabled on entry to an object,
+never explicitly enabled. On exit from an object, the
+cancelability state should always be restored to its value on entry to
+the object.
+.P
+This follows from a modularity argument: if the client of an object
+(or the client of an object that uses that object) has disabled
+cancelability, it is because the client does not want to be concerned
+about cleaning up if the thread is canceled while executing some
+sequence of actions. If an object is called in such a state and it
+enables cancelability and a cancellation request is pending for that
+thread, then the thread is canceled, contrary to the wish of the client
+that disabled.
+.P
+Second, the
+cancelability type may be explicitly set to either
+.IR deferred
+or
+.IR asynchronous
+upon entry to an object. But as with the cancelability state, on exit
+from an object the cancelability type should always be restored to its
+value on entry to the object.
+.P
+Finally, only functions that are cancel-safe
+may be called from a thread that is asynchronously cancelable.
+.SH "FUTURE DIRECTIONS"
+The
+\fIpthread_setcancelstate\fR()
+function may be added to the table of async-signal-safe functions in
+.IR "Section 2.4.3" ", " "Signal Actions".
+.SH "SEE ALSO"
+.IR "\fIpthread_cancel\fR\^(\|)"
+.P
+The Base Definitions volume of POSIX.1\(hy2017,
+.IR "\fB<pthread.h>\fP"
+.\"
+.SH COPYRIGHT
+Portions of this text are reprinted and reproduced in electronic form
+from IEEE Std 1003.1-2017, Standard for Information Technology
+-- Portable Operating System Interface (POSIX), The Open Group Base
+Specifications Issue 7, 2018 Edition,
+Copyright (C) 2018 by the Institute of
+Electrical and Electronics Engineers, Inc and The Open Group.
+In the event of any discrepancy between this version and the original IEEE and
+The Open Group Standard, the original IEEE and The Open Group Standard
+is the referee document. The original Standard can be obtained online at
+http://www.opengroup.org/unix/online.html .
+.PP
+Any typographical or formatting errors that appear
+in this page are most likely
+to have been introduced during the conversion of the source files to
+man page format. To report such errors, see
+https://www.kernel.org/doc/man-pages/reporting_bugs.html .