jpeg pushed a commit to branch master.

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

commit 96e58cebf788989dce8c5e8e5853d5c9423d535d
Author: Jean-Philippe Andre <jp.an...@samsung.com>
Date:   Wed Mar 12 14:06:23 2014 +0900

    Evas filters: Fix memory leak when destroying the object
    
    The GL buffers set to be freed were released only the async case...
    which doesn't make sense since GL is sync.
    
    @fix
---
 src/lib/evas/filters/evas_filter.c | 16 +++++++++-------
 1 file changed, 9 insertions(+), 7 deletions(-)

diff --git a/src/lib/evas/filters/evas_filter.c 
b/src/lib/evas/filters/evas_filter.c
index 5b59fcc..3389061 100644
--- a/src/lib/evas/filters/evas_filter.c
+++ b/src/lib/evas/filters/evas_filter.c
@@ -1863,6 +1863,7 @@ _filter_chain_run(Evas_Filter_Context *ctx)
 {
    Evas_Filter_Command *cmd;
    Eina_Bool ok = EINA_FALSE;
+   void *buffer;
 
    DEBUG_TIME_BEGIN();
 
@@ -1882,6 +1883,13 @@ _filter_chain_run(Evas_Filter_Context *ctx)
 end:
    ctx->running = EINA_FALSE;
    DEBUG_TIME_END();
+
+   EINA_LIST_FREE(ctx->post_run.buffers_to_free, buffer)
+     {
+        if (ctx->gl_engine)
+          ENFN->image_free(ENDT, buffer);
+     }
+
    return ok;
 }
 
@@ -1890,16 +1898,9 @@ _filter_thread_run_cb(void *data)
 {
    Evas_Filter_Context *ctx = data;
    Eina_Bool success;
-   void *buffer;
 
    success = _filter_chain_run(ctx);
 
-   EINA_LIST_FREE(ctx->post_run.buffers_to_free, buffer)
-     {
-        if (ctx->gl_engine)
-          ENFN->image_free(ENDT, buffer);
-     }
-
    if (ctx->post_run.cb)
      ctx->post_run.cb(ctx, ctx->post_run.data, success);
 }
@@ -1924,6 +1925,7 @@ evas_filter_run(Evas_Filter_Context *ctx)
      }
 
    ret = _filter_chain_run(ctx);
+
    if (ctx->post_run.cb)
      ctx->post_run.cb(ctx, ctx->post_run.data, ret);
    return ret;

-- 


Reply via email to