summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNobuyoshi Nakada <nobu@ruby-lang.org>2022-05-23 11:04:42 +0900
committerNobuyoshi Nakada <nobu@ruby-lang.org>2022-05-23 11:04:43 +0900
commit9134e761407eed2cc10893d53291f81b8270dee3 (patch)
tree4580dc3372e94fb08409e125d4a2195dd7db217b
parent218e8bdcb0f52e83ef295eb1661d9b1494fbbbf4 (diff)
Support old Mac OS X
`pthread_threadid_np` is available since Mac OS X 10.6, use `pthread_mach_thread_np` on older systems.
-rw-r--r--thread_pthread.c8
1 files changed, 8 insertions, 0 deletions
diff --git a/thread_pthread.c b/thread_pthread.c
index b52efe6db9..c825b731a6 100644
--- a/thread_pthread.c
+++ b/thread_pthread.c
@@ -40,6 +40,10 @@
#include <time.h>
#include <signal.h>
+#if defined __APPLE__
+# include <AvailabilityMacros.h>
+#endif
+
#if defined(HAVE_SYS_EVENTFD_H) && defined(HAVE_EVENTFD)
# define USE_EVENTFD (1)
# include <sys/eventfd.h>
@@ -1766,6 +1770,10 @@ native_thread_native_thread_id(rb_thread_t *target_th)
return INT2FIX(tid);
#elif defined(__APPLE__)
uint64_t tid;
+ if (MAC_OS_X_VERSION_MAX_ALLOWED < MAC_OS_X_VERSION_10_6 ||
+ !&pthread_threadid_np /* check weakly linked symbol */) {
+ return ULL2NUM(pthread_mach_thread_np(pthread_self()));
+ }
int e = pthread_threadid_np(target_th->nt->thread_id, &tid);
if (e != 0) rb_syserr_fail(e, "pthread_threadid_np");
return ULL2NUM((unsigned long long)tid);