I guess there is a bug in the fbdevHWSetVideoModes() function.

void
fbdevHWSetVideoModes(ScrnInfoPtr pScrn)
{
        ...
        DisplayModePtr mode,this,last = NULL;

...
if (NULL == pScrn->modes) {
...
} else {
this = xnfalloc(sizeof(DisplayModeRec));
memcpy(this,mode,sizeof(DisplayModeRec));
this->next = pScrn->modes;
this->prev = last;
last->next = this; /* Oops... this is not good. 'last' is NULL at the first time. */
pScrn->modes->prev = this;
}
last = this;
...
}
I have XFree86-4.2.0 but nothing has changed in this function in 4.3.0.
I think this patch may help.
--- xc.orig/programs/Xserver/hw/xfree86/fbdevhw/fbdevhw.c       Mon Nov 25 17:05:00 
2002
+++ xc/programs/Xserver/hw/xfree86/fbdevhw/fbdevhw.c    Thu Apr  3 19:11:49 2003
@@ -462,7 +462,7 @@
        int virtY = pScrn->display->virtualY;
        struct fb_var_screeninfo var;
        char **modename;
-       DisplayModePtr mode,this,last = NULL;
+       DisplayModePtr mode,this,last = pScrn->modes;
 
        TRACE_ENTER("VerifyModes");
        if (NULL == pScrn->display->modes)

Reply via email to