sys_set_tid_address  [kernel/fork.c]


Sets pointer to thread ID.

The kernel keeps for each process two values called set_child_tid and clear_child_tid that are NULL by default:

set_child_tid

If a process is started using sys_clone with the CLONE_CHILD_SETTID flag, set_child_tid is set to the fifth parameter of that system call.
When set_child_tid is set, the very first thing the new process does is writing its PID at this address.

clear_child_tid

If a process is started using sys_clone with the CLONE_CHILD_CLEARTID flag, clear_child_tid is set to the fifth parameter of that system call.

The system call set_tid_address sets the clear_child_tid value for the calling process to a value pointed by ebx.

When 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 sys_futex with ebx=child_tidptr, edx=FUTEX_WAKE, edx=1; call is done. (That is, wake a single process waiting on this futex.) Errors are ignored.

Arguments

eax 258
ebx Pointer to a value specifying the thread ID.

Return values

This system call always succeeds and returns PID of the current process.

Remarks

n/a

Compatibility

n/a