diff options
author | Dmitry Stogov <dmitry@zend.com> | 2014-03-19 17:00:28 +0400 |
---|---|---|
committer | Dmitry Stogov <dmitry@zend.com> | 2014-03-19 17:00:28 +0400 |
commit | b7938ab1bd765897bd6f08a48a8aea494a961ea9 (patch) | |
tree | 22f8034d42dfac8f03b4bb6d6573e5a7f6361ac8 /Zend/zend.h | |
parent | 2e3e96b24bb1c547362af53b952f823f451e6bce (diff) | |
download | php-git-b7938ab1bd765897bd6f08a48a8aea494a961ea9.tar.gz |
Refactored GC (incomplete)
Diffstat (limited to 'Zend/zend.h')
-rw-r--r-- | Zend/zend.h | 14 |
1 files changed, 11 insertions, 3 deletions
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); \ |