[PATCH] compositor-drm: Fix output still scanout framebuffer after the scanout client was interrupted.

zhiwen.wu at linux.intel.com zhiwen.wu at linux.intel.com
Thu Feb 16 19:57:58 PST 2012


From: Alex Wu <zhiwen.wu at intel.com>

        If the scanout client was interrupted (e.g. by Ctrl-C), compositor-drm.c::page_flip_handler()
        was not guaranteed to be invoked for the last scanout drmModePageFlip(), so that pending_fs_surf_fb_id
        has no chance to reset to 0, and the output will still scanout the old framebuffer with pending_fs_surf_fb_id.
---
 src/compositor-drm.c |    5 ++++-
 1 files changed, 4 insertions(+), 1 deletions(-)

diff --git a/src/compositor-drm.c b/src/compositor-drm.c
index de6feb4..d5a8d28 100644
--- a/src/compositor-drm.c
+++ b/src/compositor-drm.c
@@ -159,7 +159,10 @@ drm_output_repaint(struct weston_output *output_base)
 	if (glCheckFramebufferStatus(GL_FRAMEBUFFER) != GL_FRAMEBUFFER_COMPLETE)
 		return;
 
-	drm_output_prepare_scanout_surface(output);
+	if (drm_output_prepare_scanout_surface(output)) {
+		if (output->pending_fs_surf_fb_id != 0)
+			output->pending_fs_surf_fb_id = 0;
+	}
 
 	wl_list_for_each_reverse(surface, &compositor->base.surface_list, link)
 		weston_surface_draw(surface, &output->base);
-- 
1.7.5.4



More information about the wayland-devel mailing list