diff options
author | Rich Felker <dalias@aerifal.cx> | 2020-08-17 20:12:53 -0400 |
---|---|---|
committer | Rich Felker <dalias@aerifal.cx> | 2020-08-17 20:12:53 -0400 |
commit | d49cf07541bb54a5ac7aec1feec8514db33db8ea (patch) | |
tree | 2ac42a1da8400e3817f233748e7abf0ddb337988 | |
parent | 22359b54ab9a3ff0a854490f3eb0fcb838e785af (diff) | |
download | musl-d49cf07541bb54a5ac7aec1feec8514db33db8ea.tar.gz musl-d49cf07541bb54a5ac7aec1feec8514db33db8ea.tar.bz2 musl-d49cf07541bb54a5ac7aec1feec8514db33db8ea.tar.xz musl-d49cf07541bb54a5ac7aec1feec8514db33db8ea.zip |
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.
-rw-r--r-- | include/unistd.h | 1 | ||||
-rw-r--r-- | src/linux/gettid.c | 8 |
2 files changed, 9 insertions, 0 deletions
diff --git a/include/unistd.h b/include/unistd.h index 7bcbff94..07584a23 100644 --- a/include/unistd.h +++ b/include/unistd.h @@ -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) diff --git a/src/linux/gettid.c b/src/linux/gettid.c new file mode 100644 index 00000000..70767137 --- /dev/null +++ b/src/linux/gettid.c @@ -0,0 +1,8 @@ +#define _GNU_SOURCE +#include <unistd.h> +#include "pthread_impl.h" + +pid_t gettid(void) +{ + return __pthread_self()->tid; +} |