diff options
author | Valentin Bartenev <vbart@nginx.com> | 2015-03-14 17:37:07 +0300 |
---|---|---|
committer | Valentin Bartenev <vbart@nginx.com> | 2015-03-14 17:37:07 +0300 |
commit | 305fc021db799c87d751f0f1f5e99afee7bb2b3b (patch) | |
tree | 8c3cf7a86f08ede19803a9f9beecb33cc0d9ebb3 /src/os/unix/ngx_thread_id.c | |
parent | 08e05a40422300a25e3b4e5b915592d7b2c41592 (diff) | |
download | nginx-305fc021db799c87d751f0f1f5e99afee7bb2b3b.tar.gz nginx-305fc021db799c87d751f0f1f5e99afee7bb2b3b.zip |
Thread pools implementation.
Diffstat (limited to 'src/os/unix/ngx_thread_id.c')
-rw-r--r-- | src/os/unix/ngx_thread_id.c | 70 |
1 files changed, 70 insertions, 0 deletions
diff --git a/src/os/unix/ngx_thread_id.c b/src/os/unix/ngx_thread_id.c new file mode 100644 index 000000000..5174f1abc --- /dev/null +++ b/src/os/unix/ngx_thread_id.c @@ -0,0 +1,70 @@ + +/* + * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. + */ + + +#include <ngx_config.h> +#include <ngx_core.h> +#include <ngx_thread_pool.h> + + +#if (NGX_LINUX) + +/* + * Linux thread id is a pid of thread created by clone(2), + * glibc does not provide a wrapper for gettid(). + */ + +ngx_tid_t +ngx_thread_tid(void) +{ + return syscall(SYS_gettid); +} + +#elif (NGX_FREEBSD) && (__FreeBSD_version >= 900031) + +#include <pthread_np.h> + +ngx_tid_t +ngx_thread_tid(void) +{ + return pthread_getthreadid_np(); +} + +#elif (NGX_DARWIN) + +/* + * MacOSX thread has two thread ids: + * + * 1) MacOSX 10.6 (Snow Leoprad) has pthread_threadid_np() returning + * an uint64_t value, which is obtained using the __thread_selfid() + * syscall. It is a number above 300,000. + */ + +ngx_tid_t +ngx_thread_tid(void) +{ + uint64_t tid; + + (void) pthread_threadid_np(NULL, &tid); + return tid; +} + +/* + * 2) Kernel thread mach_port_t returned by pthread_mach_thread_np(). + * It is a number in range 100-100,000. + * + * return pthread_mach_thread_np(pthread_self()); + */ + +#else + +ngx_tid_t +ngx_thread_tid(void) +{ + return (uint64_t) (uintptr_t) pthread_self(); +} + +#endif |