diff options
author | Dmitry Stogov <dmitry@zend.com> | 2015-04-20 18:49:17 +0300 |
---|---|---|
committer | Dmitry Stogov <dmitry@zend.com> | 2015-04-20 18:49:17 +0300 |
commit | b99174136c19df728ced6e9ab24b890e82b4cb0e (patch) | |
tree | 539aa796fc63900191ed01668ae8376bcb658a6a | |
parent | b1a03d7d39a7e00bbe6e7c33ce1ec127c3b097d1 (diff) | |
download | php-git-b99174136c19df728ced6e9ab24b890e82b4cb0e.tar.gz |
Fixed reference counting
-rw-r--r-- | Zend/zend_execute.c | 10 |
1 files changed, 6 insertions, 4 deletions
diff --git a/Zend/zend_execute.c b/Zend/zend_execute.c index 18839ab3e8..cbe6ef1d80 100644 --- a/Zend/zend_execute.c +++ b/Zend/zend_execute.c @@ -1044,7 +1044,7 @@ fast_assign: } if (!zobj->ce->__set) { - zval *ref = NULL; + zend_reference *ref = NULL; if (EXPECTED(zobj->properties == NULL)) { rebuild_object_properties(zobj); @@ -1058,8 +1058,8 @@ fast_assign: } } else if (value_type != IS_TMP_VAR) { if (Z_ISREF_P(value)) { - if (value_type == IS_CV) { - ref = value; + if (value_type == IS_VAR) { + ref = Z_REF_P(value); } value = Z_REFVAL_P(value); if (Z_REFCOUNTED_P(value)) { @@ -1074,7 +1074,9 @@ fast_assign: ZVAL_COPY(retval, value); } if (/*value_type == IS_VAR &&*/ ref) { - efree_size(ref, sizeof(zend_reference)); + if (UNEXPECTED(--GC_REFCOUNT(ref) == 0)) { + efree_size(ref, sizeof(zend_reference)); + } } return; } |