summaryrefslogtreecommitdiff
path: root/Zend/zend_list.c
diff options
context:
space:
mode:
Diffstat (limited to 'Zend/zend_list.c')
-rw-r--r--Zend/zend_list.c27
1 files changed, 26 insertions, 1 deletions
diff --git a/Zend/zend_list.c b/Zend/zend_list.c
index 5f13b83937..a4a567b26d 100644
--- a/Zend/zend_list.c
+++ b/Zend/zend_list.c
@@ -231,10 +231,35 @@ int zend_init_rsrc_plist(ELS_D)
void zend_destroy_rsrc_list(ELS_D)
{
- zend_hash_reverse_destroy(&EG(regular_list));
+ Bucket *p, *q;
+ HashTable *ht = &EG(regular_list);
+
+ while (1) {
+ p = ht->pListTail;
+ if (!p) {
+ break;
+ }
+ q = p->pListLast;
+ if (q) {
+ q->pListNext = NULL;
+ }
+ ht->pListTail = q;
+
+ if (ht->pDestructor) {
+ if (setjmp(EG(bailout))==0) {
+ ht->pDestructor(p->pData);
+ }
+ }
+ if (!p->pDataPtr && p->pData) {
+ pefree(p->pData, ht->persistent);
+ }
+ pefree(p, ht->persistent);
+ }
+ pefree(ht->arBuckets, ht->persistent);
}
+
void zend_destroy_rsrc_plist(ELS_D)
{
zend_hash_reverse_destroy(&EG(persistent_list));