summaryrefslogtreecommitdiff
path: root/ext/objspace
diff options
context:
space:
mode:
Diffstat (limited to 'ext/objspace')
-rw-r--r--ext/objspace/object_tracing.c11
1 files changed, 6 insertions, 5 deletions
diff --git a/ext/objspace/object_tracing.c b/ext/objspace/object_tracing.c
index 00b33caa79..0c268b114a 100644
--- a/ext/objspace/object_tracing.c
+++ b/ext/objspace/object_tracing.c
@@ -121,13 +121,14 @@ freeobj_i(VALUE tpval, void *data)
st_data_t v;
struct allocation_info *info;
- if (st_lookup(arg->object_table, obj, &v)) {
- info = (struct allocation_info *)v;
- if (arg->keep_remains) {
+ if (arg->keep_remains) {
+ if (st_lookup(arg->object_table, obj, &v)) {
+ info = (struct allocation_info *)v;
info->living = 0;
}
- else {
- st_delete(arg->object_table, &obj, &v);
+ }
+ else {
+ if (st_delete(arg->object_table, &obj, &v)) {
delete_unique_str(arg->str_table, info->path);
delete_unique_str(arg->str_table, info->class_path);
ruby_xfree(info);