Commit 6172bd2b authored by Alex Goins's avatar Alex Goins
Browse files

randr: Check rrPrivKey before autobinding GPU screens

RRProviderAutoConfigGpuScreen() is called from outside RandR, so there is no
guarantee that RandR has been initialized when it is called.

As mentioned in commit 4226c6d0, 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 4226c6d0

, fix the problem by checking
dixPrivateKeyRegistered(rrPrivKey) before calling rrGetScrPriv.
Signed-off-by: Alex Goins's avatarAlex Goins <agoins@nvidia.com>
parent e33453f9
...@@ -490,10 +490,20 @@ RRDeliverProviderEvent(ClientPtr client, WindowPtr pWin, RRProviderPtr provider) ...@@ -490,10 +490,20 @@ RRDeliverProviderEvent(ClientPtr client, WindowPtr pWin, RRProviderPtr provider)
void void
RRProviderAutoConfigGpuScreen(ScreenPtr pScreen, ScreenPtr primaryScreen) RRProviderAutoConfigGpuScreen(ScreenPtr pScreen, ScreenPtr primaryScreen)
{ {
rrScrPrivPtr pScrPriv = rrGetScrPriv(pScreen); rrScrPrivPtr pScrPriv;
rrScrPrivPtr primaryPriv = rrGetScrPriv(primaryScreen); rrScrPrivPtr primaryPriv;
RRProviderPtr provider = pScrPriv->provider; RRProviderPtr provider;
RRProviderPtr primary_provider = primaryPriv->provider; RRProviderPtr primary_provider;
/* Bail out if RandR wasn't initialized. */
if (!dixPrivateKeyRegistered(rrPrivKey))
return;
pScrPriv = rrGetScrPriv(pScreen);
primaryPriv = rrGetScrPriv(primaryScreen);
provider = pScrPriv->provider;
primary_provider = primaryPriv->provider;
if (!provider || !primary_provider) if (!provider || !primary_provider)
return; return;
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment