jpeg pushed a commit to branch master.

http://git.enlightenment.org/core/efl.git/commit/?id=c783b8d4502a524e8081277fd9180ea83dc9796b

commit c783b8d4502a524e8081277fd9180ea83dc9796b
Author: Jean-Philippe Andre <[email protected]>
Date:   Mon Mar 3 16:22:40 2014 +0900

    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 302d837..894f8ef 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);
                }

-- 


Reply via email to