summary refs log tree commit diff stats
path: root/lib
diff options
context:
space:
mode:
authorEugene Kabanov <ka@hardcore.kiev.ua>2017-05-31 22:00:16 +0300
committerAndreas Rumpf <rumpf_a@web.de>2017-05-31 21:00:16 +0200
commit199f061ddc8ac69bfc619670c50ebddfb6ed0fee (patch)
tree55ba49ef4482d0bb760f025c41b8b592437ca6e7 /lib
parent7b3785554fc60b974836062e6dea570999eaef77 (diff)
downloadNim-199f061ddc8ac69bfc619670c50ebddfb6ed0fee.tar.gz
Fix #5920 (#5922)
* Use native `getthrid` on OpenBSD.
* Use NetBSD specific primitive to get thread id
Diffstat (limited to 'lib')
-rw-r--r--lib/system/threads.nim12
1 files changed, 11 insertions, 1 deletions
diff --git a/lib/system/threads.nim b/lib/system/threads.nim
index d1012e9c5..49b13576c 100644
--- a/lib/system/threads.nim
+++ b/lib/system/threads.nim
@@ -264,7 +264,17 @@ else:
 
     proc getThreadId*(): int =
       result = int(lwp_gettid())
-  elif defined(macosx) or defined(freebsd) or defined(openbsd) or defined(netbsd):
+  elif defined(openbsd):
+    proc getthrid(): int32 {.importc: "getthrid", header: "<unistd.h>".}
+
+    proc getThreadId*(): int =
+      result = int(getthrid())
+  elif defined(netbsd):
+    proc lwp_self(): int32 {.importc: "_lwp_self", header: "<lwp.h>".}
+
+    proc getThreadId*(): int =
+      result = int(lwp_self())
+  elif defined(macosx) or defined(freebsd):
     proc pthread_threadid_np(y: pointer; x: var uint64): cint {.importc, header: "pthread.h".}
 
     proc getThreadId*(): int =