[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