From 9ca41e999159096cb0872b4babbb94bf5d1af4ce Mon Sep 17 00:00:00 2001 From: Jean Boussier Date: Thu, 9 Nov 2023 13:56:29 +0100 Subject: GVL Instrumentation: pass thread->self as part of event data Context: https://github.com/ivoanjo/gvl-tracing/pull/4 Some hooks may want to collect data on a per thread basis. Right now the only way to identify the concerned thread is to use `rb_nativethread_self()` or similar, but even then because of the thread cache or MaNy, two distinct Ruby threads may report the same native thread id. By passing `thread->self`, hooks can use it as a key to store the metadata. NB: Most hooks are executed outside the GVL, so such data collection need to use a thread-safe data-structure, and shouldn't use the reference in other ways from inside the hook. They must also either pin that value or handle compaction. --- thread.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'thread.c') diff --git a/thread.c b/thread.c index 71e33b164a..094ff5c77f 100644 --- a/thread.c +++ b/thread.c @@ -5409,7 +5409,7 @@ Init_Thread(void) // thread_sched_to_running(sched, th); #ifdef RB_INTERNAL_THREAD_HOOK - RB_INTERNAL_THREAD_HOOK(RUBY_INTERNAL_THREAD_EVENT_RESUMED); + RB_INTERNAL_THREAD_HOOK(RUBY_INTERNAL_THREAD_EVENT_RESUMED, th); #endif th->pending_interrupt_queue = rb_ary_hidden_new(0); -- cgit v1.2.3