vm_insnhelper.c: block argument at tailcall

* vm_insnhelper.c (vm_call_iseq_setup_tailcall): check interrupts
  after set up the new frame, not the passed block to be clobbered
  by invoked finalizers and so on.  [ruby-core:78981] [Bug #13107]

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@57293 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
nobu 2017-01-09 02:55:39 +00:00
Родитель d4983225c0
Коммит ff3496b011
1 изменённых файлов: 2 добавлений и 2 удалений

Просмотреть файл

@ -1538,8 +1538,6 @@ vm_call_iseq_setup_tailcall(rb_thread_t *th, rb_control_frame_t *cfp, struct rb_
vm_pop_frame(th, cfp, cfp->ep); vm_pop_frame(th, cfp, cfp->ep);
cfp = th->cfp; cfp = th->cfp;
RUBY_VM_CHECK_INTS(th);
sp_orig = sp = cfp->sp; sp_orig = sp = cfp->sp;
/* push self */ /* push self */
@ -1558,6 +1556,8 @@ vm_call_iseq_setup_tailcall(rb_thread_t *th, rb_control_frame_t *cfp, struct rb_
iseq->body->stack_max); iseq->body->stack_max);
cfp->sp = sp_orig; cfp->sp = sp_orig;
RUBY_VM_CHECK_INTS(th);
return Qundef; return Qundef;
} }