diff --git a/src/lib/evas/filters/evas_filter.c b/src/lib/evas/filters/evas_filter.c index fcbad016f2..055c72d555 100644 --- a/src/lib/evas/filters/evas_filter.c +++ b/src/lib/evas/filters/evas_filter.c @@ -41,6 +41,17 @@ static void _filter_buffer_unlock_all(Evas_Filter_Context *ctx); #define _free(ptr) free(ptr) //eina_freeq_ptr_main_add(ptr, NULL, sizeof(*ptr)) +static void +_buffer_del(Eo *buffer) +{ + if (!buffer) return; + + if (efl_parent_get(buffer)) + efl_del(buffer); + else + efl_unref(buffer); +} + Evas_Filter_Context * evas_filter_context_new(Evas_Public_Data *evas, Eina_Bool async, void *user_data) { @@ -116,7 +127,7 @@ static void _filter_buffer_backing_free(Evas_Filter_Buffer *fb) { if (!fb || !fb->buffer) return; - efl_unref(fb->buffer); + _buffer_del((Eo *)fb->buffer); fb->buffer = NULL; } @@ -600,7 +611,7 @@ evas_filter_buffer_backing_set(Evas_Filter_Context *ctx, int bufid, ret = EINA_TRUE; end: - if (fb->buffer != buffer) efl_unref(fb->buffer); + if (fb->buffer != buffer) _buffer_del((Eo *)fb->buffer); fb->buffer = buffer; return ret; }