summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPeter Zhu <peter@peterzhu.ca>2026-01-19 19:26:47 -0500
committerPeter Zhu <peter@peterzhu.ca>2026-01-20 18:01:22 -0500
commite24b52885feaa87cdb5796c2a08e5995274e83cb (patch)
tree0d57902e326693a4334f42d6bc2ebf6e322b5f99
parent631a5076dabcb846157a4410bcccf202fce76127 (diff)
Allow objects on Ruby stack to be GC movable
Objects on the Ruby stack can be GC movable and there is corresponding code in rb_execution_context_update to update references for moved objects.
-rw-r--r--vm.c5
1 files changed, 3 insertions, 2 deletions
diff --git a/vm.c b/vm.c
index 7c86c0ff54..2cae6779d9 100644
--- a/vm.c
+++ b/vm.c
@@ -3682,8 +3682,9 @@ rb_execution_context_mark(const rb_execution_context_t *ec)
rb_control_frame_t *cfp = ec->cfp;
rb_control_frame_t *limit_cfp = (void *)(ec->vm_stack + ec->vm_stack_size);
- VM_ASSERT(sp == ec->cfp->sp);
- rb_gc_mark_vm_stack_values((long)(sp - p), p);
+ for (long i = 0; i < (long)(sp - p); i++) {
+ rb_gc_mark_movable(p[i]);
+ }
while (cfp != limit_cfp) {
const VALUE *ep = cfp->ep;