aboutsummaryrefslogtreecommitdiffstats
path: root/src/lib/evas/filters/evas_filter.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/evas/filters/evas_filter.c')
-rw-r--r--src/lib/evas/filters/evas_filter.c13
1 files changed, 12 insertions, 1 deletions
diff --git a/src/lib/evas/filters/evas_filter.c b/src/lib/evas/filters/evas_filter.c
index 4c2d9dd010..316f88b2b8 100644
--- a/src/lib/evas/filters/evas_filter.c
+++ b/src/lib/evas/filters/evas_filter.c
@@ -680,7 +680,8 @@ evas_filter_buffer_backing_release(Evas_Filter_Context *ctx, void *stolen_buffer
if (ctx->async)
evas_unref_queue_image_put(ctx->evas, ie);
else if (ctx->gl_engine)
- ENFN->image_free(ENDT, stolen_buffer);
+ ctx->post_run.buffers_to_free =
+ eina_list_append(ctx->post_run.buffers_to_free, stolen_buffer);
else
_backing_free(ctx, ie);
@@ -1690,7 +1691,17 @@ static void
_filter_thread_run_cb(void *data)
{
Evas_Filter_Context *ctx = data;
+ void *buffer;
+
+ // TODO: Add return value check and call error cb
_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);
}