diff options
Diffstat (limited to 'gc.c')
-rw-r--r-- | gc.c | 3 |
1 files changed, 3 insertions, 0 deletions
@@ -2728,17 +2728,20 @@ run_finalizer(rb_objspace_t *objspace, VALUE obj, VALUE table) volatile struct { VALUE errinfo; VALUE objid; + rb_control_frame_t *cfp; long finished; int safe; } saved; rb_thread_t *const th = GET_THREAD(); #define RESTORE_FINALIZER() (\ + th->cfp = saved.cfp, \ rb_set_safe_level_force(saved.safe), \ rb_set_errinfo(saved.errinfo)) saved.safe = rb_safe_level(); saved.errinfo = rb_errinfo(); saved.objid = nonspecial_obj_id(obj); + saved.cfp = th->cfp; saved.finished = 0; TH_PUSH_TAG(th); |