1 X server used to crash after XF86VidModeSwitchToMode() failure,
2 because of unconditional currentMode info destruction.
4 E.g. (the case I investigated) when screen resolution set by RandR was
5 lower than requested by XF86VidModeSwitchToMode(), xf86SwitchMode is
6 unsuccessful; due to currentMode == NULL (in some way) DRIAdjustFrame()
7 called itself recursively again and again, leading to stack overflow.
9 This patch seems to avoid the crash.
11 --- XFree86-4.3.0/xc/programs/Xserver/hw/xfree86/common/xf86VidMode.c.orig Tue Jan 28 21:52:28 2003
12 +++ XFree86-4.3.0/xc/programs/Xserver/hw/xfree86/common/xf86VidMode.c Sat Mar 8 01:05:00 2003
14 VidModeSwitchMode(int scrnIndex, pointer mode)
17 + DisplayModePtr pTmpMode;
20 DEBUG_P("VidModeSwitchMode");
24 pScrn = xf86Screens[scrnIndex];
25 /* Force a mode switch */
26 + pTmpMode = pScrn->currentMode;
27 pScrn->currentMode = NULL;
28 - return xf86SwitchMode(pScrn->pScreen, mode);
29 + retval = xf86SwitchMode(pScrn->pScreen, mode);
30 + if (retval == FALSE)
31 + pScrn->currentMode = pTmpMode;