]> granicus.if.org Git - php/commitdiff
Fix destructors some more
authorZeev Suraski <zeev@php.net>
Sun, 2 Mar 2003 15:24:04 +0000 (15:24 +0000)
committerZeev Suraski <zeev@php.net>
Sun, 2 Mar 2003 15:24:04 +0000 (15:24 +0000)
Zend/zend_execute_API.c

index 0b1020a7b1746af36cfd4ac4807e477637d2a1cf..39711ea2c77328b7b65c006a3835ecf17e770667 100644 (file)
@@ -219,14 +219,6 @@ void shutdown_executor(TSRMLS_D)
 
                zend_hash_destroy(&EG(symbol_table));
 
-               while (EG(garbage_ptr)--) {
-                       if (EG(garbage)[EG(garbage_ptr)]->refcount==1) {
-                               zval_ptr_dtor(&EG(garbage)[EG(garbage_ptr)]);
-                       }
-               }
-
-               zend_ptr_stack_destroy(&EG(argument_stack));
-
                /* Cleanup static data for functions and arrays.
                   We need separate cleanup stage because of the following problem:
                   Suppose we destroy class X, which destroys function table,
@@ -238,6 +230,15 @@ void shutdown_executor(TSRMLS_D)
                   not contain objects and thus are not probelmatic */
                zend_hash_apply(EG(function_table), (apply_func_t) zend_cleanup_function_data TSRMLS_CC);
                zend_hash_apply(EG(class_table), (apply_func_t) zend_cleanup_class_data TSRMLS_CC);
+
+               while (EG(garbage_ptr)) {
+                       if (EG(garbage)[--EG(garbage_ptr)]->refcount==1) {
+                               zval_ptr_dtor(&EG(garbage)[EG(garbage_ptr)]);
+                       }
+               }
+
+               zend_ptr_stack_destroy(&EG(argument_stack));
+
                /* Destroy all op arrays */
                if (EG(full_tables_cleanup)) {
                        zend_hash_apply(EG(function_table), (apply_func_t) is_not_internal_function TSRMLS_CC);