]> granicus.if.org Git - php/commitdiff
Always report object leaks
authorNikita Popov <nikic@php.net>
Fri, 3 Jul 2015 16:32:09 +0000 (18:32 +0200)
committerNikita Popov <nikic@php.net>
Fri, 3 Jul 2015 17:33:34 +0000 (19:33 +0200)
Previously cycles were excluded from leak reports, however the
situation here has improved a lot in the meantime and we can
report all leaks.

Zend/zend_objects_API.c

index f48d40e5fb0fe591bf70c879a0ab9b18e0a82877..810de10067062c959399b147e5744c708ac162d4 100644 (file)
@@ -87,7 +87,7 @@ ZEND_API void zend_objects_store_free_object_storage(zend_objects_store *objects
                return;
        }
 
-       /* Free object contents, but don't free objects themselves */
+       /* Free object contents, but don't free objects themselves, so they show up as leaks */
        end = objects->object_buckets + 1;
        obj_ptr = objects->object_buckets + objects->top;
 
@@ -105,21 +105,6 @@ ZEND_API void zend_objects_store_free_object_storage(zend_objects_store *objects
                        }
                }
        } while (obj_ptr != end);
-
-       /* Free objects themselves if they now have a refcount of 0, which means that
-        * they were previously part of a cycle. Everything else will report as a leak.
-        * Cycles are allowed because not all internal objects currently support GC. */
-       end = objects->object_buckets + objects->top;
-       while (obj_ptr != end) {
-               obj = *obj_ptr;
-               if (IS_OBJ_VALID(obj) && GC_REFCOUNT(obj) == 0) {
-                       /* Not adding to free list as we are shutting down anyway */
-                       void *ptr = ((char*)obj) - obj->handlers->offset;
-                       GC_REMOVE_FROM_BUFFER(obj);
-                       efree(ptr);
-               }
-               obj_ptr++;
-       }
 }