evas - evas_all_sync - only inc loop/retry counter if not advancing

This commit is contained in:
Carsten Haitzler 2021-05-19 11:01:38 +01:00
parent 6f5cc5f614
commit 9294568e4c
1 changed files with 10 additions and 4 deletions

View File

@ -2767,18 +2767,24 @@ evas_render_rendering_wait(Evas_Public_Data *evas)
void
evas_all_sync(void)
{
int loops = 0;
int retries = 0, count_before, count;
while (_rendering_evases)
{
Evas_Public_Data *evas;
count_before = eina_list_count(_rendering_evases);
evas = eina_list_data_get(eina_list_last(_rendering_evases));
evas_render_rendering_wait(evas);
loops++;
if (loops > 100)
count = eina_list_count(_rendering_evases);
if (count < count_before) continue;
// this is an error case we never expct - a canvas is busy but waiting
// ont it to finish doesnt remove it from the list or somehow the
// list grows again so do this retry up to 100 times and then complain
retries++;
if (retries > 100)
{
fprintf(stderr, "ERROR: evas_all_sync did %i loops\n", loops);
ERR("Did %i retries while waiting\n", retries);
break;
}
}