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