On Thu, Apr 18, 2002 at 05:37:30PM -0000, Thies C. Arntzen wrote: > thies Thu Apr 18 13:37:30 2002 EDT > > Modified files: > /Zend zend_hash.c zend_hash.h zend_list.c > Log: > make sure the resource-list is always consistent during shutdown. this fixes > #15499 (which seems unrelated, but it isn't;-)
derick, i'll MFH this one once 4.2 is out (and it's proven to be stabe in -HEAD) re, tc > > > 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 -- PHP Development Mailing List <http://www.php.net/> To unsubscribe, visit: http://www.php.net/unsub.php