diff --git a/gc.c b/gc.c index 76d112ca53..6353a7b50a 100644 --- a/gc.c +++ b/gc.c @@ -4800,14 +4800,13 @@ rb_gc_mark_values(long n, const VALUE *values) } static void -gc_mark_and_pin_stack_values(rb_objspace_t *objspace, long n, const VALUE *values) +gc_mark_stack_values(rb_objspace_t *objspace, long n, const VALUE *values) { long i; for (i=0; ivm_stack) { + long i; VM_ASSERT(ec->cfp); - + VALUE *p = ec->vm_stack; + VALUE *sp = ec->cfp->sp; rb_control_frame_t *cfp = ec->cfp; rb_control_frame_t *limit_cfp = (void *)(ec->vm_stack + ec->vm_stack_size); + for (i = 0; i < (long)(sp - p); i++) { + VALUE ref = p[i]; + VALUE update = rb_gc_location(ref); + if (ref != update) { + p[i] = update; + } + } + while (cfp != limit_cfp) { const VALUE *ep = cfp->ep; cfp->self = rb_gc_location(cfp->self);