clients: Drop deadlock circumvention hack now that we don't need it

mesa supports EGLSwapInterval 0 now, so lets remove this hack. As a
bonus we don't conflict with the XDG shell protocol that doesn't allow
committing a null-buffer, which was a side effect of this hack.

This patch reverts e9297f8e7e. See that
commit for an explanation how this worked.

Signed-off-by: Jonas Ådahl <jadahl@gmail.com>
Reviewed-by: Derek Foreman <derekf@osg.samsung.com>
[Pekka: added reference to the original commit]
Reviewed-by: Pekka Paalanen <pekka.paalanen@collabora.co.uk>
dev
Jonas Ådahl 10 years ago committed by Pekka Paalanen
parent 1a912a9fe3
commit decc965be9
  1. 32
      clients/window.c

@ -3910,36 +3910,6 @@ surface_resize(struct surface *surface)
widget->allocation.height); widget->allocation.height);
} }
static void
hack_prevent_EGL_sub_surface_deadlock(struct window *window)
{
/*
* This hack should be removed, when EGL respects
* eglSwapInterval(0).
*
* If this window has sub-surfaces, especially a free-running
* EGL-widget, we need to post the parent surface once with
* all the old state to guarantee, that the EGL-widget will
* receive its frame callback soon. Otherwise, a forced call
* to eglSwapBuffers may end up blocking, waiting for a frame
* event that will never come, because we will commit the parent
* surface with all new state only after eglSwapBuffers returns.
*
* This assumes, that:
* 1. When the EGL widget's resize hook is called, it pauses.
* 2. When the EGL widget's redraw hook is called, it forces a
* repaint and a call to eglSwapBuffers(), and maybe resumes.
* In a single threaded application condition 1 is a no-op.
*
* XXX: This should actually be after the surface_resize() calls,
* but cannot, because then it would commit the incomplete state
* accumulated from the widget resize hooks.
*/
if (window->subsurface_list.next != &window->main_surface->link ||
window->subsurface_list.prev != &window->main_surface->link)
wl_surface_commit(window->main_surface->surface);
}
static void static void
window_do_resize(struct window *window) window_do_resize(struct window *window)
{ {
@ -3982,8 +3952,6 @@ idle_resize(struct window *window)
window->pending_allocation.width, window->pending_allocation.width,
window->pending_allocation.height); window->pending_allocation.height);
hack_prevent_EGL_sub_surface_deadlock(window);
window_do_resize(window); window_do_resize(window);
} }

Loading…
Cancel
Save