add gettid function

this is a prerequisite for addition of other interfaces that use
kernel tids, including futex and SIGEV_THREAD_ID.

there is some ambiguity as to whether the semantic return type should
be int or pid_t. either way, futex API imposes a contract that the
values fit in int (excluding some upper reserved bits). glibc used
pid_t, so in the interest of not having gratuitous mismatch (the
underlying types are the same anyway), pid_t is used here as well.

while conceptually this is a syscall, the copy stored in the thread
structure is always valid in all contexts where it's valid to call
libc functions, so it's used to avoid the syscall.
This commit is contained in:
Rich Felker 2020-08-17 20:12:53 -04:00
parent 22359b54ab
commit d49cf07541
2 changed files with 9 additions and 0 deletions

View File

@ -190,6 +190,7 @@ int syncfs(int);
int euidaccess(const char *, int);
int eaccess(const char *, int);
ssize_t copy_file_range(int, off_t *, int, off_t *, size_t, unsigned);
pid_t gettid(void);
#endif
#if defined(_LARGEFILE64_SOURCE) || defined(_GNU_SOURCE)

8
src/linux/gettid.c Normal file
View File

@ -0,0 +1,8 @@
#define _GNU_SOURCE
#include <unistd.h>
#include "pthread_impl.h"
pid_t gettid(void)
{
return __pthread_self()->tid;
}