summaryrefslogtreecommitdiff
path: root/thread_pthread.c
diff options
context:
space:
mode:
authorJean Boussier <byroot@ruby-lang.org>2023-02-06 09:29:39 +0100
committerJean Boussier <jean.boussier@gmail.com>2023-03-06 13:10:42 +0100
commit704dd25812f34228a28f37c37757a675ad078a2b (patch)
tree2482f2434bcbf9632aaa5aaba7e16ad84d5351d5 /thread_pthread.c
parent22d944c8b76be04dc437100c46626db5fe9dd7f0 (diff)
downloadruby-704dd25812f34228a28f37c37757a675ad078a2b.tar.gz
TestThreadInstrumentation: emit the EXIT event sooner
``` 1) Failure: TestThreadInstrumentation#test_thread_instrumentation [/tmp/ruby/src/trunk-repeat20-asserts/test/-ext-/thread/test_instrumentation_api.rb:33]: Call counters[4]: [3, 4, 4, 4, 0]. Expected 0 to be > 0. ``` We fire the EXIT hook after the call to `thread_sched_to_dead` which mean another thread might be running before the `EXIT` hook have been executed.
Diffstat (limited to 'thread_pthread.c')
-rw-r--r--thread_pthread.c9
1 files changed, 7 insertions, 2 deletions
diff --git a/thread_pthread.c b/thread_pthread.c
index 944570767e..693d8f10e8 100644
--- a/thread_pthread.c
+++ b/thread_pthread.c
@@ -450,6 +450,13 @@ thread_sched_to_waiting(struct rb_thread_sched *sched)
}
static void
+thread_sched_to_dead(struct rb_thread_sched *sched)
+{
+ RB_INTERNAL_THREAD_HOOK(RUBY_INTERNAL_THREAD_EVENT_EXITED);
+ thread_sched_to_waiting(sched);
+}
+
+static void
thread_sched_yield(struct rb_thread_sched *sched, rb_thread_t *th)
{
rb_thread_t *next;
@@ -1171,8 +1178,6 @@ thread_start_func_1(void *th_ptr)
#else
thread_start_func_2(th, &stack_start);
#endif
-
- RB_INTERNAL_THREAD_HOOK(RUBY_INTERNAL_THREAD_EVENT_EXITED);
}
#if USE_THREAD_CACHE
/* cache thread */