static Shm_Leaf *
_evas_shm_surface_wait(Shm_Surface *surface)
{
- int iterations = 0, i;
+ int i = 0, best = -1, best_age = -1;
- while (iterations++ < 10)
+ for (i = 0; i < surface->num_buff; i++)
{
- for (i = 0; i < surface->num_buff; i++)
+ if (surface->leaf[i].busy) continue;
+ if ((surface->leaf[i].valid) && (surface->leaf[i].age > best_age))
{
- if (surface->leaf[i].busy) continue;
- if (surface->leaf[i].valid) return &surface->leaf[i];
+ best = i;
+ best_age = surface->leaf[i].age;
}
-
- wl_display_dispatch_pending(surface->disp);
}
+
+ if (best >= 0) return &surface->leaf[best];
return NULL;
}