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