.\" Copyright (c) 2008 Linux Foundation, written by Michael Kerrisk
.\"     <mtk.manpages@gmail.com>
.\"
.\" %%%LICENSE_START(VERBATIM)
.\" Permission is granted to make and distribute verbatim copies of this
.\" manual provided the copyright notice and this permission notice are
.\" preserved on all copies.
.\"
.\" Permission is granted to copy and distribute modified versions of this
.\" manual under the conditions for verbatim copying, provided that the
.\" entire resulting derived work is distributed under the terms of a
.\" permission notice identical to this one.
.\"
.\" Since the Linux kernel and libraries are constantly changing, this
.\" manual page may be incorrect or out-of-date.  The author(s) assume no
.\" responsibility for errors or omissions, or for damages resulting from
.\" the use of the information contained herein.  The author(s) may not
.\" have taken the same level of care in the production of this manual,
.\" which is licensed free of charge, as they might when working
.\" professionally.
.\"
.\" Formatted or processed versions of this manual, if unaccompanied by
.\" the source, must acknowledge the copyright and authors of this work.
.\" %%%LICENSE_END
.\"
.TH PTHREAD_EXIT 3 2017-09-15 "Linux" "Linux Programmer's Manual"
.SH NAME
pthread_exit \- terminate calling thread
.SH SYNOPSIS
.nf
.B #include <pthread.h>
.PP
.BI "void pthread_exit(void *" retval );
.PP
Compile and link with \fI\-pthread\fP.
.fi
.SH DESCRIPTION
The
.BR pthread_exit ()
function terminates the calling thread and returns a value via
.I retval
that (if the thread is joinable)
is available to another thread in the same process that calls
.BR pthread_join (3).
.PP
Any clean-up handlers established by
.BR pthread_cleanup_push (3)
that have not yet been popped,
are popped (in the reverse of the order in which they were pushed)
and executed.
If the thread has any thread-specific data, then,
after the clean-up handlers have been executed,
the corresponding destructor functions are called,
in an unspecified order.
.PP
When a thread terminates,
process-shared resources (e.g., mutexes, condition variables,
semaphores, and file descriptors) are not released,
and functions registered using
.BR atexit (3)
are not called.
.PP
After the last thread in a process terminates,
the process terminates as by calling
.BR exit (3)
with an exit status of zero;
thus, process-shared resources
are released and functions registered using
.BR atexit (3)
are called.
.SH RETURN VALUE
This function does not return to the caller.
.SH ERRORS
This function always succeeds.
.SH ATTRIBUTES
For an explanation of the terms used in this section, see
.BR attributes (7).
.TS
allbox;
lb lb lb
l l l.
Interface	Attribute	Value
T{
.BR pthread_exit ()
T}	Thread safety	MT-Safe
.TE
.SH CONFORMING TO
POSIX.1-2001, POSIX.1-2008.
.SH NOTES
Performing a return from the start function of any thread other
than the main thread results in an implicit call to
.BR pthread_exit (),
using the function's return value as the thread's exit status.
.PP
To allow other threads to continue execution,
the main thread should terminate by calling
.BR pthread_exit ()
rather than
.BR exit (3).
.PP
The value pointed to by
.IR retval
should not be located on the calling thread's stack,
since the contents of that stack are undefined after the thread terminates.
.SH BUGS
Currently,
.\" Linux 2.6.27
there are limitations in the kernel implementation logic for
.BR wait (2)ing
on a stopped thread group with a dead thread group leader.
This can manifest in problems such as a locked terminal if a stop signal is
sent to a foreground process whose thread group leader has already called
.BR pthread_exit ().
.\" FIXME . review a later kernel to see if this gets fixed
.\" http://thread.gmane.org/gmane.linux.kernel/611611
.\" http://marc.info/?l=linux-kernel&m=122525468300823&w=2
.SH SEE ALSO
.BR pthread_create (3),
.BR pthread_join (3),
.BR pthreads (7)
