summaryrefslogtreecommitdiff
path: root/Zend/zend_hash.c
diff options
context:
space:
mode:
Diffstat (limited to 'Zend/zend_hash.c')
-rw-r--r--Zend/zend_hash.c5
1 files changed, 4 insertions, 1 deletions
diff --git a/Zend/zend_hash.c b/Zend/zend_hash.c
index a1cf8526d6..eb5081d56c 100644
--- a/Zend/zend_hash.c
+++ b/Zend/zend_hash.c
@@ -1218,8 +1218,11 @@ ZEND_API void ZEND_FASTCALL zend_array_destroy(HashTable *ht)
IS_CONSISTENT(ht);
HT_ASSERT(GC_REFCOUNT(ht) <= 1);
- if (ht->nNumUsed) {
+ /* break possible cycles */
+ GC_REMOVE_FROM_BUFFER(ht);
+ GC_TYPE_INFO(ht) = IS_NULL | (GC_WHITE << 16);
+ if (ht->nNumUsed) {
/* In some rare cases destructors of regular arrays may be changed */
if (UNEXPECTED(ht->pDestructor != ZVAL_PTR_DTOR)) {
zend_hash_destroy(ht);