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

Reply via email to