aboutsummaryrefslogtreecommitdiff
path: root/src/os/unix/ngx_thread_id.c
diff options
context:
space:
mode:
authorValentin Bartenev <vbart@nginx.com>2015-03-14 17:37:07 +0300
committerValentin Bartenev <vbart@nginx.com>2015-03-14 17:37:07 +0300
commit305fc021db799c87d751f0f1f5e99afee7bb2b3b (patch)
tree8c3cf7a86f08ede19803a9f9beecb33cc0d9ebb3 /src/os/unix/ngx_thread_id.c
parent08e05a40422300a25e3b4e5b915592d7b2c41592 (diff)
downloadnginx-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.c70
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