[Mesa-dev] [PATCH] r600/compute: Don't leak compute pool item_list/unallocated_list
Aaron Watry
awatry at gmail.com
Mon Aug 25 07:35:06 PDT 2014
On Sat, Aug 23, 2014 at 10:01 AM, Bruno Jimenez <brunojimen at gmail.com> wrote:
> 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):
>
I'm not actually worried about these items having not been freed... At
least up to this point, I
haven't seen any pool items leaking in valgrind, just the list heads themselves.
If you want, I can add this type of foreach cleanup, but I'm content
to leave it as is until it becomes
an issue... Your choice.
--Aaron
> 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