summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNikita Popov <nikita.ppv@gmail.com>2019-11-15 15:54:46 +0100
committerNikita Popov <nikita.ppv@gmail.com>2019-11-15 15:54:46 +0100
commit9899fdc4540c2470f2400c7fce71f0d3e879654f (patch)
tree6dd6e041a9eab81b885e9f6ac338c068dd89c1ae
parenta7580899f3e236f8a2f642a01df9cd07d49a7fa8 (diff)
parent3f4a15113c50d2e86a59db8d41fb0a102f43d1c2 (diff)
downloadphp-git-9899fdc4540c2470f2400c7fce71f0d3e879654f.tar.gz
Merge branch 'PHP-7.4'
* PHP-7.4: Handle reallocated root buffer during GC destroy phase Zend Engine version is no longer in -dev
-rw-r--r--Zend/zend_gc.c11
1 files changed, 6 insertions, 5 deletions
diff --git a/Zend/zend_gc.c b/Zend/zend_gc.c
index 496d855d31..a3c3691be0 100644
--- a/Zend/zend_gc.c
+++ b/Zend/zend_gc.c
@@ -1537,11 +1537,11 @@ ZEND_API int zend_gc_collect_cycles(void)
}
}
- /* Destroy zvals */
+ /* Destroy zvals. The root buffer may be reallocated. */
GC_TRACE("Destroying zvals");
- current = GC_IDX2PTR(GC_FIRST_ROOT);
- last = GC_IDX2PTR(GC_G(first_unused));
- while (current != last) {
+ idx = GC_FIRST_ROOT;
+ while (idx != end) {
+ current = GC_IDX2PTR(idx);
if (GC_IS_GARBAGE(current->ref)) {
p = GC_GET_PTR(current->ref);
GC_TRACE_REF(p, "destroying");
@@ -1572,11 +1572,12 @@ ZEND_API int zend_gc_collect_cycles(void)
zend_hash_destroy(arr);
}
}
- current++;
+ idx++;
}
/* Free objects */
current = GC_IDX2PTR(GC_FIRST_ROOT);
+ last = GC_IDX2PTR(end);
while (current != last) {
if (GC_IS_GARBAGE(current->ref)) {
p = GC_GET_PTR(current->ref);