summaryrefslogtreecommitdiff
path: root/Zend/zend_variables.h
diff options
context:
space:
mode:
authorDmitry Stogov <dmitry@zend.com>2016-10-21 17:47:30 +0300
committerDmitry Stogov <dmitry@zend.com>2016-10-21 17:47:30 +0300
commitd6c332eb513371bc7fc6b8b53016b50c73aad158 (patch)
treec995e024987ff7798fc8ebfb684a08e05b6f3323 /Zend/zend_variables.h
parent04bba0c078ccbe65672c8ec1476eb9af4b6b432c (diff)
downloadphp-git-d6c332eb513371bc7fc6b8b53016b50c73aad158.tar.gz
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.
Diffstat (limited to 'Zend/zend_variables.h')
-rw-r--r--Zend/zend_variables.h7
1 files changed, 4 insertions, 3 deletions
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);
}
}
}