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