mirror of
https://gitlab.freedesktop.org/xorg/xserver.git
synced 2025-12-25 15:20:05 +01:00
Clean up RandR12 bits on screen close (bug 27114)
When resetting the server, pScrn->EnterVT must be unwrapped or the
next server generation will end up wrapping the wrapper and causing an
infinite recursion on EnterVT.
Signed-off-by: Keith Packard <keithp@keithp.com>
Tested-by: Michael Stapelberg <michael+freedesktop@stapelberg.de>
(cherry picked from commit 68a9ee8370)
This commit is contained in:
parent
853410a873
commit
c2f661bd37
3 changed files with 28 additions and 1 deletions
|
|
@ -756,6 +756,8 @@ xf86CrtcCloseScreen (int index, ScreenPtr screen)
|
|||
|
||||
crtc->randr_crtc = NULL;
|
||||
}
|
||||
xf86RandR12CloseScreen (screen);
|
||||
|
||||
return screen->CloseScreen (index, screen);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -926,6 +926,24 @@ xf86RandR12Init (ScreenPtr pScreen)
|
|||
return TRUE;
|
||||
}
|
||||
|
||||
void
|
||||
xf86RandR12CloseScreen (ScreenPtr pScreen)
|
||||
{
|
||||
XF86RandRInfoPtr randrp;
|
||||
|
||||
#if XORG_VERSION_CURRENT < XORG_VERSION_NUMERIC(7,0,0,0,0)
|
||||
if (xf86RandR12Key == NULL)
|
||||
return;
|
||||
#endif
|
||||
|
||||
randrp = XF86RANDRINFO(pScreen);
|
||||
#if RANDR_12_INTERFACE
|
||||
xf86Screens[pScreen->myNum]->EnterVT = randrp->orig_EnterVT;
|
||||
#endif
|
||||
|
||||
free(randrp);
|
||||
}
|
||||
|
||||
void
|
||||
xf86RandR12SetRotations (ScreenPtr pScreen, Rotation rotations)
|
||||
{
|
||||
|
|
@ -1754,10 +1772,16 @@ static Bool
|
|||
xf86RandR12EnterVT (int screen_index, int flags)
|
||||
{
|
||||
ScreenPtr pScreen = screenInfo.screens[screen_index];
|
||||
ScrnInfoPtr pScrn = xf86Screens[screen_index];
|
||||
XF86RandRInfoPtr randrp = XF86RANDRINFO(pScreen);
|
||||
Bool ret;
|
||||
|
||||
if (randrp->orig_EnterVT) {
|
||||
if (!randrp->orig_EnterVT (screen_index, flags))
|
||||
pScrn->EnterVT = randrp->orig_EnterVT;
|
||||
ret = pScrn->EnterVT (screen_index, flags);
|
||||
randrp->orig_EnterVT = pScrn->EnterVT;
|
||||
pScrn->EnterVT = xf86RandR12EnterVT;
|
||||
if (!ret)
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -30,6 +30,7 @@
|
|||
|
||||
extern _X_EXPORT Bool xf86RandR12CreateScreenResources (ScreenPtr pScreen);
|
||||
extern _X_EXPORT Bool xf86RandR12Init(ScreenPtr pScreen);
|
||||
extern _X_EXPORT void xf86RandR12CloseScreen(ScreenPtr pScreen);
|
||||
extern _X_EXPORT void xf86RandR12SetRotations (ScreenPtr pScreen, Rotation rotation);
|
||||
extern _X_EXPORT void xf86RandR12SetTransformSupport (ScreenPtr pScreen, Bool transforms);
|
||||
extern _X_EXPORT Bool xf86RandR12SetConfig(ScreenPtr pScreen, Rotation rotation, int rate,
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue