summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPeter Zhu <peter@peterzhu.ca>2026-05-06 19:41:29 -0400
committerPeter Zhu <peter@peterzhu.ca>2026-05-07 17:13:20 -0400
commitd5e2779bbb8fcbaacd5f6b63894a86b4916157c7 (patch)
tree179b4d2db636ef63c3c2c7699a8d9a0c7fa2f65e
parent203d127131d2a2ad02fd5a3f09ef891e921eea37 (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.c2
-rw-r--r--gc/default/default.c2
2 files changed, 3 insertions, 1 deletions
diff --git a/gc.c b/gc.c
index d0dc70ff7f..0976d6b7b0 100644
--- a/gc.c
+++ b/gc.c
@@ -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 */