[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