summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDmitry Stogov <dmitry@zend.com>2015-04-02 12:37:34 +0300
committerDmitry Stogov <dmitry@zend.com>2015-04-02 12:37:34 +0300
commit7c2956d15c7b5e8ce10efb1bb80470ff8a8dc9fd (patch)
tree406132fa45b5d7753e4e78e36d902d7ca9ebad1c
parent0d240c3c5607f8be206f310b2c59b3f92bd5362c (diff)
parentbaf5fdf59863b75917cee1d65d632e9dc8c6d6a6 (diff)
downloadphp-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.c5
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;