diff options
| author | Peter Zhu <peter@peterzhu.ca> | 2026-05-06 19:41:29 -0400 |
|---|---|---|
| committer | Peter Zhu <peter@peterzhu.ca> | 2026-05-07 17:13:20 -0400 |
| commit | d5e2779bbb8fcbaacd5f6b63894a86b4916157c7 (patch) | |
| tree | 179b4d2db636ef63c3c2c7699a8d9a0c7fa2f65e | |
| parent | 203d127131d2a2ad02fd5a3f09ef891e921eea37 (diff) | |
Use rb_gc_get_ec in rb_gc_event_hook
This would allow rb_gc_event_hook to run in a GC thread that is a
non-Ruby thread.
| -rw-r--r-- | gc.c | 2 | ||||
| -rw-r--r-- | gc/default/default.c | 2 |
2 files changed, 3 insertions, 1 deletions
@@ -239,7 +239,7 @@ rb_gc_event_hook(VALUE obj, rb_event_flag_t event) { if (LIKELY(!rb_gc_event_hook_required_p(event))) return; - rb_execution_context_t *ec = GET_EC(); + rb_execution_context_t *ec = rb_gc_get_ec(); if (!ec->cfp) return; EXEC_EVENT_HOOK(ec, event, ec->cfp->self, 0, 0, 0, obj); diff --git a/gc/default/default.c b/gc/default/default.c index 6465b5c70e..a08f6b79c8 100644 --- a/gc/default/default.c +++ b/gc/default/default.c @@ -6415,6 +6415,8 @@ garbage_collect(rb_objspace_t *objspace, unsigned int reason) static int gc_start(rb_objspace_t *objspace, unsigned int reason) { + rb_gc_initialize_vm_context(&objspace->vm_context); + unsigned int do_full_mark = !!(reason & GPR_FLAG_FULL_MARK); if (!rb_darray_size(objspace->heap_pages.sorted)) return TRUE; /* heap is not ready */ |
