From: Michel Dänzer <[email protected]>

Fixes crash with Xinerama enabled, which disables RandR.

Fixes: https://bugs.debian.org/827984
Signed-off-by: Michel Dänzer <[email protected]>
---
 src/drmmode_display.c |  2 +-
 src/radeon_kms.c      | 21 ++++++++++++---------
 2 files changed, 13 insertions(+), 10 deletions(-)

diff --git a/src/drmmode_display.c b/src/drmmode_display.c
index b5d3dc9..2555465 100644
--- a/src/drmmode_display.c
+++ b/src/drmmode_display.c
@@ -2613,7 +2613,7 @@ restart_destroy:
                        changed = TRUE;
        }
 
-       if (changed) {
+       if (changed && dixPrivateKeyRegistered(rrPrivKey)) {
 #if XORG_VERSION_CURRENT >= XORG_VERSION_NUMERIC(1,14,99,2,0)
                RRSetChanged(xf86ScrnToScreen(scrn));
 #else
diff --git a/src/radeon_kms.c b/src/radeon_kms.c
index 940aad2..41ee597 100644
--- a/src/radeon_kms.c
+++ b/src/radeon_kms.c
@@ -241,7 +241,6 @@ static Bool RADEONCreateScreenResources_KMS(ScreenPtr 
pScreen)
 {
     ScrnInfoPtr pScrn = xf86ScreenToScrn(pScreen);
     RADEONInfoPtr  info   = RADEONPTR(pScrn);
-    rrScrPrivPtr rrScrPriv = rrGetScrPriv(pScreen);
     PixmapPtr pixmap;
     struct radeon_surface *surface;
 
@@ -251,17 +250,21 @@ static Bool RADEONCreateScreenResources_KMS(ScreenPtr 
pScreen)
     pScreen->CreateScreenResources = RADEONCreateScreenResources_KMS;
 
     /* Set the RandR primary output if Xorg hasn't */
-    if (
+    if (dixPrivateKeyRegistered(rrPrivKey)) {
+       rrScrPrivPtr rrScrPriv = rrGetScrPriv(pScreen);
+
+       if (
 #ifdef RADEON_PIXMAP_SHARING
-       !pScreen->isGPU &&
+           !pScreen->isGPU &&
 #endif
-       !rrScrPriv->primaryOutput)
-    {
-       xf86CrtcConfigPtr xf86_config = XF86_CRTC_CONFIG_PTR(pScrn);
+           !rrScrPriv->primaryOutput)
+       {
+           xf86CrtcConfigPtr xf86_config = XF86_CRTC_CONFIG_PTR(pScrn);
 
-       rrScrPriv->primaryOutput = xf86_config->output[0]->randr_output;
-       RROutputChanged(rrScrPriv->primaryOutput, FALSE);
-       rrScrPriv->layoutChanged = TRUE;
+           rrScrPriv->primaryOutput = xf86_config->output[0]->randr_output;
+           RROutputChanged(rrScrPriv->primaryOutput, FALSE);
+           rrScrPriv->layoutChanged = TRUE;
+       }
     }
 
     if (!drmmode_set_desired_modes(pScrn, &info->drmmode, FALSE))
-- 
2.8.1

_______________________________________________
xorg-driver-ati mailing list
[email protected]
https://lists.x.org/mailman/listinfo/xorg-driver-ati

Reply via email to