From e90ddc704461818f9ed92380c8581a81bfba484c Mon Sep 17 00:00:00 2001 From: Eric Wong Date: Fri, 7 Mar 2014 10:01:17 +0000 Subject: [PATCH] vm_eval.c: fix misplaced GC guard * vm_eval.c (vm_call0_body): fix RB_GC_GUARD location (check_funcall_exec): ditto --- vm_eval.c | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/vm_eval.c b/vm_eval.c index 3f34810..52cf824 100644 --- a/vm_eval.c +++ b/vm_eval.c @@ -210,10 +210,11 @@ vm_call0_body(rb_thread_t* th, rb_call_info_t *ci, const VALUE *argv) { VALUE new_args = rb_ary_new4(ci->argc, argv); - RB_GC_GUARD(new_args); rb_ary_unshift(new_args, ID2SYM(ci->mid)); th->passed_block = ci->blockptr; - return rb_funcall2(ci->recv, idMethodMissing, ci->argc+1, RARRAY_PTR(new_args)); + ret = rb_funcall2(ci->recv, idMethodMissing, ci->argc+1, RARRAY_PTR(new_args)); + RB_GC_GUARD(new_args); + return ret; } case VM_METHOD_TYPE_OPTIMIZED: switch (ci->me->def->body.optimize_type) { @@ -338,11 +339,13 @@ static VALUE check_funcall_exec(struct rescue_funcall_args *args) { VALUE new_args = rb_ary_new4(args->argc, args->argv); + VALUE ret; - RB_GC_GUARD(new_args); rb_ary_unshift(new_args, args->sym); - return rb_funcall2(args->recv, idMethodMissing, + ret = rb_funcall2(args->recv, idMethodMissing, args->argc+1, RARRAY_PTR(new_args)); + RB_GC_GUARD(new_args); + return ret; } static VALUE -- 1.9.rc1