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
This commit is contained in:
Mike Blumenkrantz 2017-03-31 14:57:34 -04:00
parent d956f34021
commit 0f6139b9cb
2 changed files with 4 additions and 0 deletions

View File

@ -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)
{

View File

@ -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_ */