From a7e38dc063e19821a4f6c1239f787786d10c82c1 Mon Sep 17 00:00:00 2001 From: Oskar Nordquist Date: Wed, 22 Jul 2020 17:38:13 +0200 Subject: [PATCH] Implement os.current_thread_id() for Darwin (assumes OSX 10.6 / iOS 3.2 and later) --- core/os/os_darwin.odin | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/core/os/os_darwin.odin b/core/os/os_darwin.odin index 9813b9b3b..5300979a1 100644 --- a/core/os/os_darwin.odin +++ b/core/os/os_darwin.odin @@ -2,6 +2,7 @@ package os foreign import dl "system:dl" foreign import libc "system:c" +foreign import pthread "system:pthread" import "core:runtime" import "core:strings" @@ -428,8 +429,13 @@ exit :: inline proc(code: int) -> ! { } current_thread_id :: proc "contextless" () -> int { - // return int(_unix_gettid()); - return 0; + tid: u64; + // NOTE(Oskar): available from OSX 10.6 and iOS 3.2. + // For older versions there is `syscall(SYS_thread_selfid)`, but not really + // the same thing apparently. + foreign pthread { pthread_threadid_np :: proc "c" (rawptr, ^u64) -> c.int ---; } + pthread_threadid_np(nil, &tid); + return int(tid); } dlopen :: inline proc(filename: string, flags: int) -> rawptr {