]> granicus.if.org Git - php/commitdiff
As Andi found out the dtor may increase the refcount.
authorMarcus Boerger <helly@php.net>
Wed, 25 Feb 2004 21:39:59 +0000 (21:39 +0000)
committerMarcus Boerger <helly@php.net>
Wed, 25 Feb 2004 21:39:59 +0000 (21:39 +0000)
Zend/zend_objects_API.c

index 330879cc0cf040ab898cde244c7b3bf77c4469c1..d6e1782cb840f00d9af3ffb5d109fded3c296100 100644 (file)
@@ -134,16 +134,17 @@ ZEND_API void zend_objects_store_del_ref(zval *zobject TSRMLS_DC)
                                obj->dtor(obj->object, handle TSRMLS_CC);
                        }
                }
-               if (obj->free_storage) {
-                       obj->free_storage(obj->object TSRMLS_CC);
+               if (obj->refcount == 0) {
+                       if (obj->free_storage) {
+                               obj->free_storage(obj->object TSRMLS_CC);
+                       }
+                       ZEND_OBJECTS_STORE_ADD_TO_FREE_LIST();
                }
-               ZEND_OBJECTS_STORE_ADD_TO_FREE_LIST();
-#if ZEND_DEBUG_OBJECTS
-               fprintf(stderr, "Deallocated object id #%d\n", handle);
-#endif
        }
 #if ZEND_DEBUG_OBJECTS
-       else {
+       if (obj->refcount == 0) {
+               fprintf(stderr, "Deallocated object id #%d\n", handle);
+       } else {
                fprintf(stderr, "Decreased refcount of object id #%d\n", handle);
        }
 #endif