[Mesa-dev] [PATCH] r600/compute: Don't leak compute pool item_list/unallocated_list

Bruno Jimenez brunojimen at gmail.com
Sat Aug 23 08:01:34 PDT 2014


On Thu, 2014-08-21 at 14:37 -0500, Aaron Watry wrote:
> v2: Change to C-style comments and fix indentation
> 
> Signed-off-by: Aaron Watry <awatry at gmail.com>
> ---
>  src/gallium/drivers/r600/compute_memory_pool.c | 5 +++++
>  1 file changed, 5 insertions(+)
> 
> diff --git a/src/gallium/drivers/r600/compute_memory_pool.c b/src/gallium/drivers/r600/compute_memory_pool.c
> index 9324b84..82de9cd 100644
> --- a/src/gallium/drivers/r600/compute_memory_pool.c
> +++ b/src/gallium/drivers/r600/compute_memory_pool.c
> @@ -95,6 +95,11 @@ void compute_memory_pool_delete(struct compute_memory_pool* pool)
>  		pool->screen->b.b.resource_destroy((struct pipe_screen *)
>  			pool->screen, (struct pipe_resource *)pool->bo);
>  	}
> +	/* In theory, all of the items were freed in compute_memory_free.
> +	   Just delete the list heads */

Hi,

If you are worried about the items not have been freed, you can try
doing something like this (mostly copied from compute_memory_free):

struct compute_memory_item *item, *next;
struct pipe_screen *screen = (struct pipe_screen *)pool->screen;
struct pipe_resource *res;

if (!LIST_IS_EMPTY(pool->item_list)) {
    LIST_FOR_EACH_ENTRY_SAFE(item, next, pool->item_list, link) {
        if (item->real_buffer) {
            res = (struct pipe_resource *)item->real_buffer;
            pool->screen->b.b.resource_destroy(screen, res);
        }

        free(item);
    }
}
/* And the same for the unallocated_list */

Note: I haven't tested it, but I think that it should work.

Hope it helps!
Bruno

> +	free(pool->item_list);
> +	free(pool->unallocated_list);
> +	/* And then the pool itself */
>  	free(pool);
>  }
>  




More information about the mesa-dev mailing list