summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gc.c7
-rw-r--r--gc/default.c7
2 files changed, 8 insertions, 6 deletions
diff --git a/gc.c b/gc.c
index 9f24ade5c5..2641115f90 100644
--- a/gc.c
+++ b/gc.c
@@ -1560,7 +1560,12 @@ rb_define_finalizer(VALUE obj, VALUE block)
{
should_be_finalizable(obj);
should_be_callable(block);
- return rb_gc_impl_define_finalizer(rb_gc_get_objspace(), obj, block);
+
+ block = rb_gc_impl_define_finalizer(rb_gc_get_objspace(), obj, block);
+
+ block = rb_ary_new3(2, INT2FIX(0), block);
+ OBJ_FREEZE(block);
+ return block;
}
void
diff --git a/gc/default.c b/gc/default.c
index cdc7961699..597044b5f6 100644
--- a/gc/default.c
+++ b/gc/default.c
@@ -2983,8 +2983,7 @@ rb_gc_impl_define_finalizer(void *objspace_ptr, VALUE obj, VALUE block)
for (i = 0; i < len; i++) {
VALUE recv = RARRAY_AREF(table, i);
if (rb_equal(recv, block)) {
- block = recv;
- goto end;
+ return recv;
}
}
}
@@ -2996,9 +2995,7 @@ rb_gc_impl_define_finalizer(void *objspace_ptr, VALUE obj, VALUE block)
rb_obj_hide(table);
st_add_direct(finalizer_table, obj, table);
}
- end:
- block = rb_ary_new3(2, INT2FIX(0), block);
- OBJ_FREEZE(block);
+
return block;
}