From 833e01343de06574271db9b0f3e2a3a5d61a89f1 Mon Sep 17 00:00:00 2001 From: Dmitry Stogov Date: Tue, 6 May 2008 16:03:16 +0000 Subject: [PATCH] GC fix --- Zend/zend_execute.c | 18 ++++++++++++------ Zend/zend_execute_API.c | 10 +++++++--- 2 files changed, 19 insertions(+), 9 deletions(-) diff --git a/Zend/zend_execute.c b/Zend/zend_execute.c index bf8884907c..4f7efea1c9 100644 --- a/Zend/zend_execute.c +++ b/Zend/zend_execute.c @@ -83,9 +83,13 @@ static inline void zend_pzval_unlock_func(zval *z, zend_free_op *should_free, in static inline void zend_pzval_unlock_free_func(zval *z) { if (!Z_DELREF_P(z)) { - GC_REMOVE_ZVAL_FROM_BUFFER(z); - zval_dtor(z); - safe_free_zval_ptr(z); + TSRMLS_FETCH(); + + if (z != &EG(uninitialized_zval)) { + GC_REMOVE_ZVAL_FROM_BUFFER(z); + zval_dtor(z); + efree(z); + } } } @@ -699,9 +703,11 @@ static inline zval* zend_assign_to_variable(zval **variable_ptr_ptr, zval *value } else { Z_ADDREF_P(value); *variable_ptr_ptr = value; - GC_REMOVE_ZVAL_FROM_BUFFER(variable_ptr); - zendi_zval_dtor(*variable_ptr); - safe_free_zval_ptr(variable_ptr); + if (variable_ptr != &EG(uninitialized_zval)) { + GC_REMOVE_ZVAL_FROM_BUFFER(variable_ptr); + zval_dtor(variable_ptr); + efree(variable_ptr); + } return value; } } else { diff --git a/Zend/zend_execute_API.c b/Zend/zend_execute_API.c index 5dcabaccbd..5aff1bde31 100644 --- a/Zend/zend_execute_API.c +++ b/Zend/zend_execute_API.c @@ -418,9 +418,13 @@ 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); + TSRMLS_FETCH(); + + if (*zval_ptr != &EG(uninitialized_zval)) { + GC_REMOVE_ZVAL_FROM_BUFFER(*zval_ptr); + zval_dtor(*zval_ptr); + efree_rel(*zval_ptr); + } } else { TSRMLS_FETCH(); -- 2.40.0