From d6c332eb513371bc7fc6b8b53016b50c73aad158 Mon Sep 17 00:00:00 2001 From: Dmitry Stogov Date: Fri, 21 Oct 2016 17:47:30 +0300 Subject: Turn IS_TYPE_COLLECTABLE zval flag into GC_COLLECTABLE zend_refcounted flag. This simplifies checks and allows reset this flag for "acyclic" arrays and objects. --- Zend/zend_variables.h | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) (limited to 'Zend/zend_variables.h') diff --git a/Zend/zend_variables.h b/Zend/zend_variables.h index 0afe68760d..b0054eedd3 100644 --- a/Zend/zend_variables.h +++ b/Zend/zend_variables.h @@ -44,10 +44,11 @@ static zend_always_inline void _zval_ptr_dtor_nogc(zval *zval_ptr ZEND_FILE_LINE static zend_always_inline void i_zval_ptr_dtor(zval *zval_ptr ZEND_FILE_LINE_DC) { if (Z_REFCOUNTED_P(zval_ptr)) { - if (!Z_DELREF_P(zval_ptr)) { - _zval_dtor_func(Z_COUNTED_P(zval_ptr) ZEND_FILE_LINE_RELAY_CC); + zend_refcounted *ref = Z_COUNTED_P(zval_ptr); + if (!--GC_REFCOUNT(ref)) { + _zval_dtor_func(ref ZEND_FILE_LINE_RELAY_CC); } else { - GC_ZVAL_CHECK_POSSIBLE_ROOT(zval_ptr); + gc_check_possible_root(ref); } } } -- cgit v1.2.1