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