diff options
Diffstat (limited to 'Zend/zend_hash.c')
-rw-r--r-- | Zend/zend_hash.c | 5 |
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); |