| /* | |
| * 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 |