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:
parent
d956f34021
commit
0f6139b9cb
|
@ -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)
|
||||
{
|
||||
|
|
|
@ -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_ */
|
||||
|
|
Loading…
Reference in New Issue