Re: [ZEND-ENGINE-CVS] cvs: Zend(PHP_4_2_0) / zend_hash.c zend_hash.h zend_list.c
| From: | Derick Rethans | Date: | Tue, 23 Apr 2002 06:54:10 +0000 |
| Subject: | Re: [ZEND-ENGINE-CVS] cvs: Zend(PHP_4_2_0) / 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-66@lists.php.net to get a copy of this message | ||
Hey Thies,
nice in time again :)
Derick
On Tue, 23 Apr 2002, Thies C. Arntzen wrote:
> thies Tue Apr 23 02:53:29 2002 EDT
>
> Modified files: (Branch: PHP_4_2_0)
> /Zend zend_hash.c zend_hash.h zend_list.c
> Log:
> MFH. make sure resource list is always consistent during request shutdown.
>
>
> Index: Zend/zend_hash.c
> diff -u Zend/zend_hash.c:1.83 Zend/zend_hash.c:1.83.2.1
> --- Zend/zend_hash.c:1.83 Sun Jan 6 10:21:09 2002
> +++ Zend/zend_hash.c Tue Apr 23 02:53:26 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.55.2.1
> --- Zend/zend_hash.h:1.55 Sun Jan 6 10:21:09 2002
> +++ Zend/zend_hash.h Tue Apr 23 02:53:28 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.52.2.1
> --- Zend/zend_list.c:1.52 Sun Jan 6 10:21:09 2002
> +++ Zend/zend_list.c Tue Apr 23 02:53: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
>