[PATCH weston 1/3] clients: Drop deadlock circumvention hack now that we don't need it

Jonas Ådahl jadahl at gmail.com
Mon Jan 26 02:19:05 PST 2015


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.

Signed-off-by: Jonas Ådahl <jadahl at gmail.com>
---
 clients/window.c | 32 --------------------------------
 1 file changed, 32 deletions(-)

diff --git a/clients/window.c b/clients/window.c
index c5082ba..b45b499 100644
--- a/clients/window.c
+++ b/clients/window.c
@@ -3802,36 +3802,6 @@ surface_resize(struct surface *surface)
 }
 
 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
 window_do_resize(struct window *window)
 {
 	struct surface *surface;
@@ -3873,8 +3843,6 @@ idle_resize(struct window *window)
 	    window->pending_allocation.width,
 	    window->pending_allocation.height);
 
-	hack_prevent_EGL_sub_surface_deadlock(window);
-
 	window_do_resize(window);
 }
 
-- 
2.1.0



More information about the wayland-devel mailing list