summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--test/ruby/test_thread.rb2
-rw-r--r--thread.c4
-rw-r--r--thread_pthread.c9
-rw-r--r--thread_win32.c1
4 files changed, 11 insertions, 5 deletions
diff --git a/test/ruby/test_thread.rb b/test/ruby/test_thread.rb
index a16f066dc7..dbd0328e28 100644
--- a/test/ruby/test_thread.rb
+++ b/test/ruby/test_thread.rb
@@ -1335,7 +1335,7 @@ q.pop
end
def test_thread_native_thread_id
- skip "don't support native_thread_id" unless (begin; Thread.main.native_thread_id; rescue NotImplementedError; nil; end)
+ skip "don't support native_thread_id" unless Thread.method_defined?(:native_thread_id)
assert_instance_of Integer, Thread.main.native_thread_id
th1 = Thread.start{sleep}
diff --git a/thread.c b/thread.c
index e36ea6110b..419bf09151 100644
--- a/thread.c
+++ b/thread.c
@@ -3402,6 +3402,7 @@ rb_thread_setname(VALUE thread, VALUE name)
return name;
}
+#if USE_NATIVE_THREAD_NATIVE_THREAD_ID
/*
* call-seq:
* thr.native_thread_id -> integer
@@ -3431,6 +3432,9 @@ rb_thread_native_thread_id(VALUE thread)
if (rb_threadptr_dead(target_th)) return Qnil;
return native_thread_native_thread_id(target_th);
}
+#else
+# define rb_thread_native_thread_id rb_f_notimplement
+#endif
/*
* call-seq:
diff --git a/thread_pthread.c b/thread_pthread.c
index 87db59e638..8e983076b6 100644
--- a/thread_pthread.c
+++ b/thread_pthread.c
@@ -1726,13 +1726,10 @@ native_set_another_thread_name(rb_nativethread_id_t thread_id, VALUE name)
#endif
}
+#if defined(RB_THREAD_T_HAS_NATIVE_ID) || defined(__APPLE__)
static VALUE
native_thread_native_thread_id(rb_thread_t *target_th)
{
-#if !defined(RB_THREAD_T_HAS_NATIVE_ID) && !defined(__APPLE__)
- rb_notimplement();
-#endif
-
#ifdef RB_THREAD_T_HAS_NATIVE_ID
int tid = target_th->tid;
if (tid == 0) return Qnil;
@@ -1744,6 +1741,10 @@ native_thread_native_thread_id(rb_thread_t *target_th)
return ULL2NUM((unsigned long long)tid);
#endif
}
+# define USE_NATIVE_THREAD_NATIVE_THREAD_ID 1
+#else
+# define USE_NATIVE_THREAD_NATIVE_THREAD_ID 0
+#endif
static void
ubf_timer_invalidate(void)
diff --git a/thread_win32.c b/thread_win32.c
index fc31c09ec3..84b8776418 100644
--- a/thread_win32.c
+++ b/thread_win32.c
@@ -842,6 +842,7 @@ native_thread_native_thread_id(rb_thread_t *th)
if (tid == 0) rb_sys_fail("GetThreadId");
return ULONG2NUM(tid);
}
+#define USE_NATIVE_THREAD_NATIVE_THREAD_ID 1
#if USE_MJIT
static unsigned long __stdcall