From: Dmitry Stogov Date: Tue, 6 May 2008 16:02:50 +0000 (+0000) Subject: GC fix X-Git-Tag: RELEASE_2_0_0b1~85 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=c9652e94f5cef97dbd8e58c8a8b756d65fd3ceba;p=php GC fix --- diff --git a/Zend/zend_execute.c b/Zend/zend_execute.c index 29494387a6..5ceaec8cd0 100644 --- a/Zend/zend_execute.c +++ b/Zend/zend_execute.c @@ -85,9 +85,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); + } } } /* }}} */ @@ -778,9 +782,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 ca4cc2b298..612d8069fb 100644 --- a/Zend/zend_execute_API.c +++ b/Zend/zend_execute_API.c @@ -445,9 +445,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();