Previously it is possible that creating rotation data, then cleaning
up and creating again so that pScreen->BlockHandler and
xf86_config->BlockHandler all point to xf86RotateBlockHandler.
See bug #19343.
---
 hw/xfree86/modes/xf86Rotate.c |    8 ++++++--
 1 files changed, 6 insertions(+), 2 deletions(-)

diff --git a/hw/xfree86/modes/xf86Rotate.c b/hw/xfree86/modes/xf86Rotate.c
index 8e03c6c..21b7aff 100644
--- a/hw/xfree86/modes/xf86Rotate.c
+++ b/hw/xfree86/modes/xf86Rotate.c
@@ -291,6 +291,8 @@ xf86RotateBlockHandler(int screenNum, pointer blockData,
        /* Re-wrap if rotation is still happening */
        xf86_config->BlockHandler = pScreen->BlockHandler;
        pScreen->BlockHandler = xf86RotateBlockHandler;
+    } else {
+       xf86_config->BlockHandler = NULL;
     }
 }
 
@@ -477,8 +479,10 @@ xf86CrtcRotate (xf86CrtcPtr crtc)
                goto bail2;
            
            /* Wrap block handler */
-           xf86_config->BlockHandler = pScreen->BlockHandler;
-           pScreen->BlockHandler = xf86RotateBlockHandler;
+           if (!xf86_config->BlockHandler) {
+               xf86_config->BlockHandler = pScreen->BlockHandler;
+               pScreen->BlockHandler = xf86RotateBlockHandler;
+           }
        }
 #ifdef RANDR_12_INTERFACE
        if (transform)
-- 
1.5.4.3

_______________________________________________
xorg mailing list
[email protected]
http://lists.freedesktop.org/mailman/listinfo/xorg

Reply via email to