From: Dmitry Stogov Date: Fri, 7 Mar 2014 11:58:09 +0000 (+0400) Subject: Fixed refcounting X-Git-Tag: POST_PHPNG_MERGE~412^2~368 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=6d67dd3103ce8ac0b07981131311f6b29754a518;p=php Fixed refcounting --- diff --git a/Zend/zend.h b/Zend/zend.h index e2aaf1a103..bb883b40cb 100644 --- a/Zend/zend.h +++ b/Zend/zend.h @@ -699,7 +699,7 @@ END_EXTERN_C() ZVAL_DUP(_zv, Z_REFVAL_P(_zv)); \ } else if (Z_TYPE_P(_zv) == IS_OBJECT ||\ Z_TYPE_P(_zv) == IS_RESOURCE) { \ - Z_ADDREF_P(_zv); \ + /*Z_ADDREF_P(_zv);*/ \ } else { \ Z_DELREF_P(_zv); \ zval_copy_ctor(_zv); \ @@ -734,10 +734,17 @@ END_EXTERN_C() #define SEPARATE_ZVAL_TO_MAKE_IS_REF(zv) do { \ zval *__zv = (zv); \ if (!Z_ISREF_P(__zv)) { \ - zval ref; \ - ZVAL_COPY_VALUE(&ref, __zv); \ - SEPARATE_ZVAL(&ref); \ - ZVAL_NEW_REF(__zv, &ref); \ + if (!Z_REFCOUNTED_P(__zv) || \ + Z_REFCOUNT_P(__zv) == 1) { \ + ZVAL_NEW_REF(__zv, __zv); \ + } else if (Z_TYPE_P(__zv) == IS_OBJECT || \ + Z_TYPE_P(__zv) == IS_RESOURCE) { \ + } else { \ + zval ref; \ + ZVAL_COPY_VALUE(&ref, __zv); \ + SEPARATE_ZVAL(&ref); \ + ZVAL_NEW_REF(__zv, &ref); \ + } \ } \ } while (0)