From c783b8d4502a524e8081277fd9180ea83dc9796b Mon Sep 17 00:00:00 2001 From: Jean-Philippe Andre Date: Mon, 3 Mar 2014 16:22:40 +0900 Subject: [PATCH] Evas filters: Avoid potential memory leaks Properly free the buffers when they are not in the current context list. --- src/lib/evas/filters/evas_filter.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/lib/evas/filters/evas_filter.c b/src/lib/evas/filters/evas_filter.c index 302d837813..894f8effa2 100644 --- a/src/lib/evas/filters/evas_filter.c +++ b/src/lib/evas/filters/evas_filter.c @@ -113,8 +113,11 @@ _filter_buffer_backing_free(Evas_Filter_Buffer *fb) if (fb->stolen) { - fb->delete_me = EINA_TRUE; - return; + if (eina_list_data_find(fb->ctx->buffers, fb)) + { + fb->delete_me = EINA_TRUE; + return; + } } INF("Free backing of buffer %d fb @ %p backing @ %p alloc %d", fb->id, fb, fb->backing, fb->allocated); @@ -671,6 +674,7 @@ evas_filter_buffer_backing_release(Evas_Filter_Context *ctx, void *stolen_buffer fb->stolen = EINA_FALSE; if (fb->delete_me) { + ctx->buffers = eina_list_remove_list(ctx->buffers, li); ENFN->image_free(ENDT, stolen_buffer); free(fb); }