aboutsummaryrefslogtreecommitdiffstats
path: root/gc.c
diff options
context:
space:
mode:
Diffstat (limited to 'gc.c')
-rw-r--r--gc.c15
1 files changed, 7 insertions, 8 deletions
diff --git a/gc.c b/gc.c
index ad83006ea0..8525085541 100644
--- a/gc.c
+++ b/gc.c
@@ -2796,16 +2796,15 @@ run_finalizer(rb_objspace_t *objspace, VALUE obj, VALUE table)
saved.finished = 0;
TH_PUSH_TAG(th);
- if ((state = TH_EXEC_TAG()) == TAG_NONE) {
- for (i = saved.finished;
- RESTORE_FINALIZER(), i<RARRAY_LEN(table);
- saved.finished = ++i) {
- run_single_final(RARRAY_AREF(table, i), saved.objid);
- }
- }
- else {
+ state = TH_EXEC_TAG();
+ if (state != TAG_NONE) {
++saved.finished; /* skip failed finalizer */
}
+ for (i = saved.finished;
+ RESTORE_FINALIZER(), i<RARRAY_LEN(table);
+ saved.finished = ++i) {
+ run_single_final(RARRAY_AREF(table, i), saved.objid);
+ }
TH_POP_TAG();
#undef RESTORE_FINALIZER
}