[PATCH] present: Clear pending flip pixmaps at CloseScreen

Keith Packard keithp at keithp.com
Wed Sep 10 14:01:59 PDT 2014


If a flip is active at server reset time, the associated window will
get destroyed which will queue an unflip operation. If that isn't
synchronous, then it won't have finished by the time CloseScreen is
called.

Calling present_flip_idle will signal the fence and remove the
reference to the fence and pixmap, freeing these in the X server and
allowing a DRM client to clean up as well.

This also rewords other comments in present_flip_destroy, removing
scary words about needing synchronous operation (everything in this
function is synchronous now) and describing what effect we actually
need from present_set_abort_flip.

Signed-off-by: Keith Packard <keithp at keithp.com>
---
 present/present.c | 7 ++++---
 1 file changed, 4 insertions(+), 3 deletions(-)

diff --git a/present/present.c b/present/present.c
index f488e21..47d434b 100644
--- a/present/present.c
+++ b/present/present.c
@@ -935,11 +935,12 @@ present_flip_destroy(ScreenPtr screen)
 {
     present_screen_priv_ptr     screen_priv = present_screen_priv(screen);
 
-    /* XXX this needs to be synchronous for server reset */
-
-    /* Do the actual cleanup once the flip has been performed by the hardware */
+    /* Reset window pixmaps back to the screen pixmap */
     if (screen_priv->flip_pending)
         present_set_abort_flip(screen);
+
+    /* Drop reference to any pending flip or unflip pixmaps. */
+    present_flip_idle(screen);
 }
 
 void
-- 
2.0.1



More information about the xorg-devel mailing list