From b7938ab1bd765897bd6f08a48a8aea494a961ea9 Mon Sep 17 00:00:00 2001 From: Dmitry Stogov Date: Wed, 19 Mar 2014 17:00:28 +0400 Subject: Refactored GC (incomplete) --- Zend/zend.h | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) (limited to 'Zend/zend.h') diff --git a/Zend/zend.h b/Zend/zend.h index 261a77bd9a..90cf94d8f2 100644 --- a/Zend/zend.h +++ b/Zend/zend.h @@ -681,6 +681,16 @@ END_EXTERN_C() zval_copy_ctor(__z1); \ } while (0) +#define ZVAL_UNREF(z) do { \ + zval *_z = (z); \ + zend_reference *ref; \ + ZEND_ASSERT(Z_ISREF_P(_z)); \ + ref = Z_REF_P(_z); \ + ZVAL_COPY_VALUE(_z, &ref->val); \ + GC_REMOVE_FROM_BUFFER(ref); \ + efree(ref); \ + } while (0) + // TODO: invalud ??? #define INIT_PZVAL_COPY(z, v) \ do { \ @@ -720,9 +730,7 @@ END_EXTERN_C() zval *__zv = (zv); \ if (Z_ISREF_P(__zv)) { \ if (Z_REFCOUNT_P(__zv) == 1) { \ - zend_reference *ref = Z_REF_P(__zv); \ - ZVAL_COPY_VALUE(__zv, &ref->val); \ - efree(ref); \ + ZVAL_UNREF(__zv); \ } else { \ zval *ref = Z_REFVAL_P(__zv); \ Z_DELREF_P(__zv); \ -- cgit v1.2.1