On Fri, 1 Feb 2008, Roman Dubtsov wrote:

Hello,

I have intermittent FVWM crashes. They occur when I start either
gnome-control-center, nvidia-settings, or wine (this one works almost
always). I use FVWM from Debian.

[EMAIL PROTECTED] 00:51:32 fvwm-cvs]$ fvwm -V
fvwm 2.5.23 compiled on Jan 31 2008 at 23:37:18
with support for: ReadLine, RPlay, Stroke, XPM, PNG, SVG, Shape, XShm,
SM, Bidi text,

Core is not always dumped, sometimes FVWM crashes with X11 error
message similar to this:

[fvwm.0][FvwmErrorHandler]: <<ERROR>> *** internal error ***
[fvwm.0][FvwmErrorHandler]: <<ERROR>> Request 73, Error 8, EventType: 28

That is a BadMatch error from XGetImage (probalby line 1149 in colorset.c), which would then return null, and explain the segfault on line 1170. According to the man page of XGetImage, that is caused by trying to read outside the pixmap. Which seems quite strange since on line 1045-1048 the pixmap and size is set to that of the root_pic. And it then verifies the with at line 1102-1121, and the XServer is grabbed during the test until after the XGetImage call.

Is there anything else I can do to help to resolve the issue?
colorset.c in CVS head did not change since 2.5.23, so I did not build
and test it, but will surely do if necessary.

I'm interesting in having verified that cs->picture == NULL for the colorset, and also have the with and hight queried from the image before the XGetImage printed. I must be missing some possible path here. But I fail to see how the picture can be non-NULL - at least not with your Colorset definition.

Can you add something like
{
        int w;
        int h;
        XID dummy;

        if (
                !XGetGeometry(
                        dpy, average_pix, &dummy,
                        (int *)&dummy, (int *)&dummy,
                        (unsigned int *)&w, (unsigned int *)&h,
                        (unsigned int *)&dummy,
                        (unsigned int *)&dummy))
        {
                fprintf(stderr, "failed to get dimension\n");
        }
        else
        {
                fprintf(stderr, "width: %d, height: %d, expexted: %dx%d\n",
                        w, h, cs->width, cs->height);
        }
        fprintf(stderr, "picture: %p\n",  cs->picture);
}

before the call to XGetImage? And try to reproduce the error.

/Viktor

Reply via email to