On Fri, Jan 26, 2018 at 4:24 PM, <[email protected]> wrote:
>
> Modified: apr/apr/trunk/buckets/apr_buckets_alloc.c
> URL:
> http://svn.apache.org/viewvc/apr/apr/trunk/buckets/apr_buckets_alloc.c?rev=1822315&r1=1822314&r2=1822315&view=diff
> ==============================================================================
> --- apr/apr/trunk/buckets/apr_buckets_alloc.c (original)
> +++ apr/apr/trunk/buckets/apr_buckets_alloc.c Fri Jan 26 15:24:40 2018
> @@ -45,12 +45,21 @@ struct apr_bucket_alloc_t {
> static apr_status_t alloc_cleanup(void *data)
> {
> apr_bucket_alloc_t *list = data;
> +#if APR_POOL_DEBUG
> + apr_allocator_t *allocator = NULL;
> +#endif
> +
> +#if APR_POOL_DEBUG
> + if (list->pool && list->allocator != apr_pool_allocator_get(list->pool))
> {
> + allocator = list->allocator;
> + }
> +#endif
>
> apr_allocator_free(list->allocator, list->blocks);
>
> #if APR_POOL_DEBUG
> - if (list->pool && list->allocator != apr_pool_allocator_get(list->pool))
> {
> - apr_allocator_destroy(list->allocator);
> + if (allocator) {
> + apr_allocator_destroy(allocator);
> }
> #endif
Since apr_allocator_destroy() will free all its nodes, maybe we can simply:
#if APR_POOL_DEBUG
if (list->pool && list->allocator != apr_pool_allocator_get(list->pool)) {
apr_allocator_destroy(allocator);
}
else
#endif
apr_allocator_free(list->allocator, list->blocks);
In any case, nice fix!
Thanks,
Yann.