summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMike Blumenkrantz <zmike@osg.samsung.com>2017-03-31 14:57:34 -0400
committerMike Blumenkrantz <zmike@osg.samsung.com>2017-03-31 14:57:25 -0400
commit0f6139b9cbbde565632b238ea4a4f72b5003f062 (patch)
tree20c6215323624676f39f678da09cb40d71bcf698
parentd956f340214a105736c48d9c9eff9b4898b6994e (diff)
downloadefl-0f6139b9cbbde565632b238ea4a4f72b5003f062.tar.gz
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
-rw-r--r--src/lib/ecore_evas/ecore_evas_buffer.c3
-rw-r--r--src/lib/ecore_evas/ecore_evas_buffer.h1
2 files changed, 4 insertions, 0 deletions
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_ */