From 0f6139b9cbbde565632b238ea4a4f72b5003f062 Mon Sep 17 00:00:00 2001 From: Mike Blumenkrantz Date: Fri, 31 Mar 2017 14:57:34 -0400 Subject: [PATCH] ecore-evas: add flag for buffer canvas to prevent deadlock in pixels_get when calling pixels_get during a render callback, another render would trigger which would cause a deadlock from evas spinlock usage @fix --- src/lib/ecore_evas/ecore_evas_buffer.c | 3 +++ src/lib/ecore_evas/ecore_evas_buffer.h | 1 + 2 files changed, 4 insertions(+) diff --git a/src/lib/ecore_evas/ecore_evas_buffer.c b/src/lib/ecore_evas/ecore_evas_buffer.c index 80f4ac8e01..4910c072c8 100644 --- a/src/lib/ecore_evas/ecore_evas_buffer.c +++ b/src/lib/ecore_evas/ecore_evas_buffer.c @@ -147,6 +147,7 @@ _ecore_evas_buffer_render(Ecore_Evas *ee) int rend = 0; bdata = ee->engine.data; + if (bdata->in_render) return 0; EINA_LIST_FOREACH(ee->sub_ecore_evas, ll, ee2) { if (ee2->func.fn_pre_render) ee2->func.fn_pre_render(ee2); @@ -166,7 +167,9 @@ _ecore_evas_buffer_render(Ecore_Evas *ee) if (ee->func.fn_pre_render) ee->func.fn_pre_render(ee); if (bdata->pixels) { + bdata->in_render = 1; updates = evas_render_updates(ee->evas); + bdata->in_render = 0; } if (bdata->image) { diff --git a/src/lib/ecore_evas/ecore_evas_buffer.h b/src/lib/ecore_evas/ecore_evas_buffer.h index e065d8a5f9..e29dee335b 100644 --- a/src/lib/ecore_evas/ecore_evas_buffer.h +++ b/src/lib/ecore_evas/ecore_evas_buffer.h @@ -9,6 +9,7 @@ struct _Ecore_Evas_Engine_Buffer_Data { void (*free_func) (void *data, void *pix); void *(*alloc_func) (void *data, int size); void *data; + Eina_Bool in_render : 1; }; #endif /* _ECORE_EVAS_BUFFER_PRIVATE_H_ */