cvs: ZendEngine2 / zend_hash.c zend_hash.h zend_list.c

From: Date: Fri, 19 Apr 2002 16:53:36 +0000
Subject: cvs: ZendEngine2 / zend_hash.c zend_hash.h zend_list.c
Groups: php.zend-engine.cvs 
Request: Send a blank email to php-zend-engine-cvs+get-59@lists.php.net to get a copy of this message
sebastian Fri Apr 19 12:53:36 2002 EDT Modified files: /ZendEngine2 zend_hash.c zend_hash.h zend_list.c Log: MFZE1: make sure the resource-list is always consistent during shutdown (Thies). Index: ZendEngine2/zend_hash.c diff -u ZendEngine2/zend_hash.c:1.84 ZendEngine2/zend_hash.c:1.85 --- ZendEngine2/zend_hash.c:1.84 Fri Apr 19 12:43:27 2002 +++ ZendEngine2/zend_hash.c Fri Apr 19 12:53:35 2002 @@ -653,6 +653,23 @@ SET_INCONSISTENT(HT_DESTROYED); } +ZEND_API void zend_hash_graceful_reverse_destroy(HashTable *ht) +{ + Bucket *p; + + IS_CONSISTENT(ht); + + p = ht->pListTail; + while (p != NULL) { + zend_hash_apply_deleter(ht, p); + p = ht->pListTail; + } + + pefree(ht->arBuckets, ht->persistent); + + SET_INCONSISTENT(HT_DESTROYED); +} + /* This is used to selectively delete certain entries from a hashtable. * destruct() receives the data and decides if the entry should be deleted * or not Index: ZendEngine2/zend_hash.h diff -u ZendEngine2/zend_hash.h:1.55 ZendEngine2/zend_hash.h:1.56 --- ZendEngine2/zend_hash.h:1.55 Sun Jan 6 10:21:35 2002 +++ ZendEngine2/zend_hash.h Fri Apr 19 12:53:35 2002 @@ -119,6 +119,7 @@ typedef int (*apply_func_args_t)(void *pDest, int num_args, va_list args, zend_hash_key *hash_key); ZEND_API void zend_hash_graceful_destroy(HashTable *ht); +ZEND_API void zend_hash_graceful_reverse_destroy(HashTable *ht); ZEND_API void zend_hash_apply(HashTable *ht, apply_func_t apply_func TSRMLS_DC); ZEND_API void zend_hash_apply_with_argument(HashTable *ht, apply_func_arg_t apply_func, void * TSRMLS_DC); ZEND_API void zend_hash_apply_with_arguments(HashTable *ht, apply_func_args_t apply_func, int, ...); Index: ZendEngine2/zend_list.c diff -u ZendEngine2/zend_list.c:1.52 ZendEngine2/zend_list.c:1.53 --- ZendEngine2/zend_list.c:1.52 Sun Jan 6 10:21:36 2002 +++ ZendEngine2/zend_list.c Fri Apr 19 12:53:36 2002 @@ -230,30 +230,7 @@ void zend_destroy_rsrc_list(HashTable *ht TSRMLS_DC) { - Bucket *p, *q; - - while (1) { - p = ht->pListTail; - if (!p) { - break; - } - q = p->pListLast; - if (q) { - q->pListNext = NULL; - } - ht->pListTail = q; - - if (ht->pDestructor) { - zend_try { - ht->pDestructor(p->pData); - } zend_end_try(); - } - if (!p->pDataPtr && p->pData) { - pefree(p->pData, ht->persistent); - } - pefree(p, ht->persistent); - } - pefree(ht->arBuckets, ht->persistent); + zend_hash_graceful_reverse_destroy(ht); }

« previous php.zend-engine.cvs (#59) next »