Re: [ZEND-ENGINE-CVS] cvs: Zend / zend_hash.c zend_hash.h zend_list.c
| From: | Andi Gutmans | Date: | Fri, 19 Apr 2002 16:05:37 +0000 |
| Subject: | Re: [ZEND-ENGINE-CVS] cvs: Zend / zend_hash.c zend_hash.h zend_list.c | ||
| References: | 1 | Groups: | php.zend-engine.cvs |
| Request: | Send a blank email to php-zend-engine-cvs+get-57@lists.php.net to get a copy of this message | ||
Please update Engine 2 also.
Andi
At 17:37 18/04/2002 +0000, Thies C. Arntzen wrote:
thies Thu Apr 18 13:37:30 2002 EDTModified files:/Zend zend_hash.c zend_hash.h zend_list.cLog: make sure the resource-list is always consistent during shutdown. this fixes #15499 (which seems unrelated, but it isn't;-) Index: Zend/zend_hash.c diff -u Zend/zend_hash.c:1.83 Zend/zend_hash.c:1.84--- Zend/zend_hash.c:1.83 Sun Jan 6 10:21:09 2002 +++ Zend/zend_hash.c Thu Apr 18 13:37:28 2002@@ -651,6 +651,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: Zend/zend_hash.h diff -u Zend/zend_hash.h:1.55 Zend/zend_hash.h:1.56--- Zend/zend_hash.h:1.55 Sun Jan 6 10:21:09 2002 +++ Zend/zend_hash.h Thu Apr 18 13:37:29 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: Zend/zend_list.c diff -u Zend/zend_list.c:1.52 Zend/zend_list.c:1.53--- Zend/zend_list.c:1.52 Sun Jan 6 10:21:09 2002 +++ Zend/zend_list.c Thu Apr 18 13:37:29 2002@@ -230,32 +230,8 @@ 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);} - static int clean_module_resource(zend_rsrc_list_entry *le, int *resource_id TSRMLS_DC) { -- Zend Engine CVS Mailing List (http://cvs.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php