diff options
author | Nikita Popov <nikita.ppv@gmail.com> | 2019-11-15 15:54:46 +0100 |
---|---|---|
committer | Nikita Popov <nikita.ppv@gmail.com> | 2019-11-15 15:54:46 +0100 |
commit | 9899fdc4540c2470f2400c7fce71f0d3e879654f (patch) | |
tree | 6dd6e041a9eab81b885e9f6ac338c068dd89c1ae | |
parent | a7580899f3e236f8a2f642a01df9cd07d49a7fa8 (diff) | |
parent | 3f4a15113c50d2e86a59db8d41fb0a102f43d1c2 (diff) | |
download | php-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.c | 11 |
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); |