diff options
author | Nobuyoshi Nakada <[email protected]> | 2019-07-03 23:52:52 +0900 |
---|---|---|
committer | Nobuyoshi Nakada <[email protected]> | 2019-07-03 23:52:52 +0900 |
commit | 9f1d67a68f55fe7a16840960e0817d362b16d5b2 (patch) | |
tree | b36d08538fe4ee283082fad030a19e8a301c4cc3 /gc.c | |
parent | 7b9bb6f44a0dc891f41c06804e828790ba5fec6d (diff) |
Renamed to rb_objspace_reachable_object_p
Diffstat (limited to 'gc.c')
-rw-r--r-- | gc.c | 22 |
1 files changed, 11 insertions, 11 deletions
@@ -2954,16 +2954,16 @@ should_be_finalizable(VALUE obj) rb_check_frozen(obj); } -struct should_not_capture_data { +struct reachable_object_data { VALUE obj; VALUE set; bool found; }; static void -should_not_capture_callback(VALUE child, void *dp) +reachable_object_callback(VALUE child, void *dp) { - struct should_not_capture_data *data = dp; + struct reachable_object_data *data = dp; if (child == data->obj) data->found = true; @@ -2975,18 +2975,17 @@ should_not_capture_callback(VALUE child, void *dp) return; rb_hash_aset(data->set, child, Qtrue); - rb_objspace_reachable_objects_from(child, should_not_capture_callback, data); + rb_objspace_reachable_objects_from(child, reachable_object_callback, data); } -static void -should_not_capture(VALUE block, VALUE obj) +static int +rb_objspace_reachable_object_p(VALUE obj, VALUE root) { - struct should_not_capture_data data = {obj, rb_ident_hash_new()}; + struct reachable_object_data data = {obj, rb_ident_hash_new()}; rb_obj_hide(data.set); - rb_objspace_reachable_objects_from(block, should_not_capture_callback, &data); + rb_objspace_reachable_objects_from(root, reachable_object_callback, &data); rb_hash_clear(data.set); - if (data.found) - rb_warn("object is reachable from finalizer - it may never be run"); + return data.found; } /* @@ -3019,7 +3018,8 @@ define_final(int argc, VALUE *argv, VALUE os) } if (RTEST(ruby_verbose)) { - should_not_capture(block, obj); + if (rb_objspace_reachable_object_p(obj, block)) + rb_warn("object is reachable from finalizer - it may never be run"); } return define_final0(obj, block); |