diff options
| author | Dmitry Stogov <dmitry@php.net> | 2008-01-22 09:27:48 +0000 |
|---|---|---|
| committer | Dmitry Stogov <dmitry@php.net> | 2008-01-22 09:27:48 +0000 |
| commit | 71592cec0684d376df3fc91645e98fb9679edcd5 (patch) | |
| tree | 7d05ba19e5e467fcab54952c23b8069275394803 /Zend/zend_execute_API.c | |
| parent | 2be1ae5415f3087b662ac9ba6f84bb82db59c0d2 (diff) | |
| download | php-git-71592cec0684d376df3fc91645e98fb9679edcd5.tar.gz | |
Added garbage collector
Diffstat (limited to 'Zend/zend_execute_API.c')
| -rw-r--r-- | Zend/zend_execute_API.c | 17 |
1 files changed, 11 insertions, 6 deletions
diff --git a/Zend/zend_execute_API.c b/Zend/zend_execute_API.c index d8ab3b7d85..f51047189c 100644 --- a/Zend/zend_execute_API.c +++ b/Zend/zend_execute_API.c @@ -418,17 +418,22 @@ ZEND_API void _zval_ptr_dtor(zval **zval_ptr ZEND_FILE_LINE_DC) /* {{{ */ #endif Z_DELREF_PP(zval_ptr); if (Z_REFCOUNT_PP(zval_ptr) == 0) { + GC_REMOVE_ZVAL_FROM_BUFFER(*zval_ptr); zval_dtor(*zval_ptr); safe_free_zval_ptr_rel(*zval_ptr ZEND_FILE_LINE_RELAY_CC ZEND_FILE_LINE_CC); - } else if (Z_REFCOUNT_PP(zval_ptr) == 1) { - if ((*zval_ptr)->type == IS_OBJECT) { - TSRMLS_FETCH(); + } else { + TSRMLS_FETCH(); - if (EG(ze1_compatibility_mode)) { - return; + if (Z_REFCOUNT_PP(zval_ptr) == 1) { + if ((*zval_ptr)->type == IS_OBJECT) { + if (EG(ze1_compatibility_mode)) { + return; + } } + Z_UNSET_ISREF_PP(zval_ptr); } - Z_UNSET_ISREF_PP(zval_ptr); + + GC_ZVAL_CHECK_POSSIBLE_ROOT(*zval_ptr); } } /* }}} */ |
