diff options
| author | Dmitry Stogov <dmitry@zend.com> | 2015-04-02 12:37:34 +0300 |
|---|---|---|
| committer | Dmitry Stogov <dmitry@zend.com> | 2015-04-02 12:37:34 +0300 |
| commit | 7c2956d15c7b5e8ce10efb1bb80470ff8a8dc9fd (patch) | |
| tree | 406132fa45b5d7753e4e78e36d902d7ca9ebad1c | |
| parent | 0d240c3c5607f8be206f310b2c59b3f92bd5362c (diff) | |
| parent | baf5fdf59863b75917cee1d65d632e9dc8c6d6a6 (diff) | |
| download | php-git-7c2956d15c7b5e8ce10efb1bb80470ff8a8dc9fd.tar.gz | |
Merge branch 'PHP-5.6'
* PHP-5.6:
Prevent GC from changing zval or object 'color' before they are actually inserted into possible roots buffer.
Conflicts:
NEWS
Zend/zend_gc.c
| -rw-r--r-- | Zend/zend_gc.c | 5 |
1 files changed, 1 insertions, 4 deletions
diff --git a/Zend/zend_gc.c b/Zend/zend_gc.c index 8eb53e9e1d..e0364c92af 100644 --- a/Zend/zend_gc.c +++ b/Zend/zend_gc.c @@ -147,8 +147,6 @@ ZEND_API void ZEND_FASTCALL gc_possible_root(zend_refcounted *ref) GC_BENCH_INC(zval_possible_root); if (EXPECTED(GC_GET_COLOR(GC_INFO(ref)) == GC_BLACK)) { - GC_SET_PURPLE(GC_INFO(ref)); - if (!GC_ADDRESS(GC_INFO(ref))) { gc_root_buffer *newRoot = GC_G(unused); @@ -159,7 +157,6 @@ ZEND_API void ZEND_FASTCALL gc_possible_root(zend_refcounted *ref) GC_G(first_unused)++; } else { if (!GC_G(gc_enabled)) { - GC_SET_BLACK(GC_INFO(ref)); return; } GC_REFCOUNT(ref)++; @@ -169,10 +166,10 @@ ZEND_API void ZEND_FASTCALL gc_possible_root(zend_refcounted *ref) if (!newRoot) { return; } - GC_SET_PURPLE(GC_INFO(ref)); GC_G(unused) = newRoot->prev; } + GC_SET_PURPLE(GC_INFO(ref)); newRoot->next = GC_G(roots).next; newRoot->prev = &GC_G(roots); GC_G(roots).next->prev = newRoot; |
