.\" Copyright (C) 2004 Andries Brouwer (aeb@cwi.nl)
.\"
+.\" %%%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.
.\"
.\" Formatted or processed versions of this manual, if unaccompanied by
.\" the source, must acknowledge the copyright and authors of this work.
+.\" %%%LICENSE_END
.\"
-.TH SET_TID_ADDRESS 2 2004-09-10 "Linux" "Linux Programmer's Manual"
+.TH SET_TID_ADDRESS 2 2012-07-19 "Linux" "Linux Programmer's Manual"
.SH NAME
set_tid_address \- set pointer to thread ID
.SH SYNOPSIS
.BI "long set_tid_address(int *" tidptr );
.fi
.SH DESCRIPTION
-The kernel keeps for each process two values called
+For each process, the kernel maintains two attributes (addresses) called
.I set_child_tid
and
-.I clear_child_tid
-that are NULL by default.
-.SS set_child_tid
+.IR clear_child_tid .
+These two attributes contain the value NULL by default.
+.TP
+.I set_child_tid
If a process is started using
.BR clone (2)
with the
.B CLONE_CHILD_SETTID
flag,
.I set_child_tid
-is set to
-.IR child_tidptr ,
-the fifth argument of that system call.
-.LP
+is set to the value passed in the
+.I ctid
+argument of that system call.
+.IP
When
.I set_child_tid
is set, the very first thing the new process does
is writing its PID at this address.
-.SS clear_child_tid
+.TP
+.I clear_child_tid
If a process is started using
.BR clone (2)
with the
.B CLONE_CHILD_CLEARTID
flag,
.I clear_child_tid
-is set to
-.IR child_tidptr ,
-the fifth argument of that system call.
+is set to the value passed in the
+.I ctid
+argument of that system call.
.LP
The system call
.BR set_tid_address ()
value for the calling process to
.IR tidptr .
.LP
-When
+When a process whose
+.I clear_child_tid
+is not NULL terminates, then,
+if the process is sharing memory with other processes or threads,
+then 0 is written at the address specified in
.I clear_child_tid
-is set, and the process exits, and the process was sharing memory
-with other processes or threads, then 0 is written at this address,
-and a
-.I futex(child_tidptr, FUTEX_WAKE, 1, NULL, NULL, 0);
-call is done.
-(That is, wake a single process waiting on this futex.)
-Errors are ignored.
-.SH "RETURN VALUE"
+and the kernel performs the following operation:
+
+ futex(clear_child_tid, FUTEX_WAKE, 1, NULL, NULL, 0);
+
+The effect of this operation is to wake a single process that
+is performing a futex wait on the memory location.
+Errors from the futex wake operation are ignored.
+.SH RETURN VALUE
.BR set_tid_address ()
always returns the PID of the calling process.
.SH ERRORS
.SH VERSIONS
This call is present since Linux 2.5.48.
Details as given here are valid since Linux 2.5.49.
-.SH "CONFORMING TO"
+.SH CONFORMING TO
This system call is Linux-specific.
-.SH "SEE ALSO"
+.SH SEE ALSO
.BR clone (2),
.BR futex (2)