mirror of
https://github.com/ruby/ruby.git
synced 2025-08-15 13:39:04 +02:00
Add missing GVL hooks for M:N threads and ractors
[Bug #20019] This fixes GVL instrumentation in three locations it was missing: - Suspending when blocking on a Ractor - Suspending when doing a coroutine transfer from an M:N thread - Resuming after an M:N thread starts Co-authored-by: Matthew Draper <matthew@trebex.net>
This commit is contained in:
parent
715cf9b690
commit
ad54fbf281
4 changed files with 94 additions and 46 deletions
|
@ -1304,6 +1304,8 @@ rb_ractor_sched_sleep(rb_execution_context_t *ec, rb_ractor_t *cr, rb_unblock_fu
|
|||
RB_VM_SAVE_MACHINE_CONTEXT(th);
|
||||
th->status = THREAD_STOPPED_FOREVER;
|
||||
|
||||
RB_INTERNAL_THREAD_HOOK(RUBY_INTERNAL_THREAD_EVENT_SUSPENDED, th);
|
||||
|
||||
bool can_direct_transfer = !th_has_dedicated_nt(th);
|
||||
thread_sched_wakeup_next_thread(sched, th, can_direct_transfer);
|
||||
thread_sched_wait_running_turn(sched, th, can_direct_transfer);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue