summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlex Goins <agoins@nvidia.com>2020-07-02 20:12:43 -0500
committerAlex Goins <agoins@nvidia.com>2020-07-21 16:48:37 -0500
commit1179938c179a6e96170275e24adac3325539be65 (patch)
tree69e88194f40691fbc3815625edbca21426df29ca
parent4912f693e8e3abbd090ee02b4bfe14703c3bad0f (diff)
randr: Check rrPrivKey in RRHasScanoutPixmap()
RRHasScanoutPixmap() is called from xf86CheckHWCursor(), regardless of whether or not RandR has been initialized. As mentioned in commit 4226c6d, it's possible that RandR has not been initialized if the server is configured with Xinerama and there is more than one X screen. Calling rrGetScrPriv when RandR isn't initialized causes an assertion failure that aborts the server: Xorg: ../include/privates.h:121: dixGetPrivateAddr: Assertion key->initialized' failed. Just as in commit 4226c6d, fix the problem by checking dixPrivateKeyRegistered(rrPrivKey) before calling rrGetScrPriv. Signed-off-by: Alex Goins <agoins@nvidia.com> Acked-by: Olivier Fourdan <ofourdan@redhat.com> (cherry picked from commit 8eeff5d7880c6885ee6f206355599f13d739afa7)
-rw-r--r--randr/rrcrtc.c8
1 files changed, 7 insertions, 1 deletions
diff --git a/randr/rrcrtc.c b/randr/rrcrtc.c
index ae7e30605..7839a0eda 100644
--- a/randr/rrcrtc.c
+++ b/randr/rrcrtc.c
@@ -2012,9 +2012,15 @@ RRReplaceScanoutPixmap(DrawablePtr pDrawable, PixmapPtr pPixmap, Bool enable)
Bool
RRHasScanoutPixmap(ScreenPtr pScreen)
{
- rrScrPriv(pScreen);
+ rrScrPrivPtr pScrPriv;
int i;
+ /* Bail out if RandR wasn't initialized. */
+ if (!dixPrivateKeyRegistered(rrPrivKey))
+ return FALSE;
+
+ pScrPriv = rrGetScrPriv(pScreen);
+
if (!pScreen->is_output_slave)
return FALSE;