summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNikita Popov <nikita.ppv@gmail.com>2019-08-28 15:35:53 +0200
committerNikita Popov <nikita.ppv@gmail.com>2019-08-28 17:04:36 +0200
commitc45f19590c4d442c0ecf5a3b55cd0fb928243e6a (patch)
tree1971efb6d56abccc8b85be48514c777abd4cd1b4
parent2709d6a2508abfdda1b84f0426ae644c703180ed (diff)
downloadphp-git-c45f19590c4d442c0ecf5a3b55cd0fb928243e6a.tar.gz
Remove delref in free_object_storage
This gives us better object leak diagnostics.
-rw-r--r--Zend/zend_objects_API.c5
1 files changed, 2 insertions, 3 deletions
diff --git a/Zend/zend_objects_API.c b/Zend/zend_objects_API.c
index 7c5d44a502..80359b5e1e 100644
--- a/Zend/zend_objects_API.c
+++ b/Zend/zend_objects_API.c
@@ -87,7 +87,8 @@ ZEND_API void ZEND_FASTCALL zend_objects_store_free_object_storage(zend_objects_
return;
}
- /* Free object contents, but don't free objects themselves, so they show up as leaks */
+ /* Free object contents, but don't free objects themselves, so they show up as leaks.
+ * Also add a ref to all objects, so the object can't be freed by something else later. */
end = objects->object_buckets + 1;
obj_ptr = objects->object_buckets + objects->top;
@@ -101,7 +102,6 @@ ZEND_API void ZEND_FASTCALL zend_objects_store_free_object_storage(zend_objects_
if (obj->handlers->free_obj != zend_object_std_dtor) {
GC_ADDREF(obj);
obj->handlers->free_obj(obj);
- GC_DELREF(obj);
}
}
}
@@ -115,7 +115,6 @@ ZEND_API void ZEND_FASTCALL zend_objects_store_free_object_storage(zend_objects_
GC_ADD_FLAGS(obj, IS_OBJ_FREE_CALLED);
GC_ADDREF(obj);
obj->handlers->free_obj(obj);
- GC_DELREF(obj);
}
}
} while (obj_ptr != end);