.\" 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_TRYJOIN_NP 3 2021-03-22 "Linux" "Linux Programmer's Manual"
.SH NAME
pthread_tryjoin_np, pthread_timedjoin_np \- try to join with a
terminated thread
.SH SYNOPSIS
.nf
.BR "#define _GNU_SOURCE" "             /* See feature_test_macros(7) */"
.B #include <pthread.h>
.PP
.BI "int pthread_tryjoin_np(pthread_t " thread ", void **" retval );
.BI "int pthread_timedjoin_np(pthread_t " thread ", void **" retval ,
.BI "                         const struct timespec *" abstime );
.fi
.PP
Compile and link with \fI\-pthread\fP.
.SH DESCRIPTION
These functions operate in the same way as
.BR pthread_join (3),
except for the differences described on this page.
.PP
The
.BR pthread_tryjoin_np ()
function performs a nonblocking join with the thread
.IR thread ,
returning the exit status of the thread in
.IR *retval .
If
.I thread
has not yet terminated, then instead of blocking, as is done by
.BR pthread_join (3),
the call returns an error.
.PP
The
.BR pthread_timedjoin_np ()
function performs a join-with-timeout.
If
.I thread
has not yet terminated,
then the call blocks until a maximum time, specified in
.IR abstime ,
measured against the
.BR CLOCK_REALTIME
clock.
If the timeout expires before
.I thread
terminates,
the call returns an error.
The
.I abstime
argument is a structure of the following form,
specifying an absolute time measured since the Epoch (see
.BR time (2)):
.PP
.in +4n
.EX
struct timespec {
    time_t tv_sec;     /* seconds */
    long   tv_nsec;    /* nanoseconds */
};
.EE
.in
.SH RETURN VALUE
On success,
these functions return 0;
on error, they return an error number.
.SH ERRORS
These functions can fail with the same errors as
.BR pthread_join (3).
.BR pthread_tryjoin_np ()
can in addition fail with the following error:
.TP
.B EBUSY
.I thread
had not yet terminated at the time of the call.
.PP
.BR pthread_timedjoin_np ()
can in addition fail with the following errors:
.TP
.BR ETIMEDOUT
The call timed out before
.I thread
terminated.
.TP
.BR EINVAL
.I abstime
value is invalid
.RI ( tv_sec
is less than 0 or
.IR tv_nsec
is greater than 1e9).
.PP
.BR pthread_timedjoin_np ()
never returns the error
.BR EINTR .
.SH VERSIONS
These functions first appeared in glibc in version 2.3.3.
.SH ATTRIBUTES
For an explanation of the terms used in this section, see
.BR attributes (7).
.ad l
.nh
.TS
allbox;
lbx lb lb
l l l.
Interface	Attribute	Value
T{
.BR pthread_tryjoin_np (),
.BR pthread_timedjoin_np ()
T}	Thread safety	MT-Safe
.TE
.hy
.ad
.sp 1
.SH CONFORMING TO
These functions are nonstandard GNU extensions;
hence the suffix "_np" (nonportable) in the names.
.SH EXAMPLES
The following code waits to join for up to 5 seconds:
.PP
.in +4n
.EX
struct timespec ts;
int s;

\&...

if (clock_gettime(CLOCK_REALTIME, &ts) == \-1) {
    /* Handle error */
}

ts.tv_sec += 5;

s = pthread_timedjoin_np(thread, NULL, &ts);
if (s != 0) {
    /* Handle error */
}
.EE
.in
.SH BUGS
The
.BR pthread_timedjoin_np ()
function measures time by internally calculating a relative sleep interval
that is then measured against the
.BR CLOCK_MONOTONIC
clock instead of the
.BR CLOCK_REALTIME
clock.
Consequently, the timeout is unaffected by discontinuous changes to the
.BR CLOCK_REALTIME
clock.
.SH SEE ALSO
.BR clock_gettime (2),
.BR pthread_exit (3),
.BR pthread_join (3),
.BR pthreads (7)
