Browse Source

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.
master
Rich Felker 6 years ago
parent
commit
d49cf07541
  1. 1
      include/unistd.h
  2. 8
      src/linux/gettid.c

1
include/unistd.h

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

8
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;
}
Loading…
Cancel
Save