Bug 1015

Summary: Composite & ati driver crash during window activity.
Product: xorg Reporter: Stéphan Kochen <g-lite>
Component: Server/DDX/XorgAssignee: Xorg Project Team <xorg-team>
Status: RESOLVED DUPLICATE QA Contact:
Severity: normal    
Priority: high    
Version: git   
Hardware: x86 (IA32)   
OS: Linux (All)   
Whiteboard:
i915 platform: i915 features:

Description Stéphan Kochen 2004-08-08 15:12:41 UTC
X.org crashes after a short period of moving, creating, closing, etc. windows
(in my case, repeatedly opening and closing the blackbox root menu) using
Composite, xcompmgr and the default ati drivers. This is on x86, Radeon 9700 Pro
(R300), CVS HEAD from somewhere this morning (2004-08-08).

Short backtrace:
--------------------------------------------------
(gdb) bt
#0  0xb7ea5a11 in kill () from /lib/libc.so.6
#1  0xb7ea5655 in raise () from /lib/libc.so.6
#2  0xb7ea6cb8 in abort () from /lib/libc.so.6
#3  0x081bbf90 in compPositionWindow (pWin=0x8927c28, x=601, y=164) at
compwindow.c:132
#4  0x081e61b0 in miMoveWindow (pWin=0x8927c28, x=601, y=164,
pNextSib=0x88c6d70, kind=VTMove) at miwindow.c:528
#5  0x081bc565 in compMoveWindow (pWin=0x8927c28, x=600, y=163, pSib=0x88c6d70,
kind=VTMove) at compwindow.c:300
#6  0x080fc7a5 in ConfigureWindow (pWin=0x8927c28, mask=3, vlist=0xafb77014,
client=0x88c1a50) at window.c:2476
#7  0x080d347b in ProcConfigureWindow (client=0x88c1a50) at dispatch.c:771
#8  0x080d2abc in Dispatch () at dispatch.c:455
#9  0x080eaa96 in main (argc=2, argv=0xbffff544, envp=0xbffff550) at main.c:442
--------------------------------------------------

Here's the code in compwindow.c leading up to this:
--------------------------------------------------
Bool
compPositionWindow (WindowPtr pWin, int x, int y)
{
    ScreenPtr	    pScreen = pWin->drawable.pScreen;
    CompScreenPtr   cs = GetCompScreen (pScreen);
    Bool	    ret = TRUE;

    pScreen->PositionWindow = cs->PositionWindow;
    /*
     * "Shouldn't need this as all possible places should be wrapped
     *
    compCheckRedirect (pWin);
     */
    if (pWin->redirectDraw != (pWin->viewable && (GetCompWindow(pWin) != NULL)))
	abort ();
    if (pWin->redirectDraw)
    {
	[...]
    }
    [...]
}
--------------------------------------------------

The call to abort () is the crasher here. The part of the if-statement failing
is pWin->viewable as can be seen from this gdb session:
--------------------------------------------------
(gdb) frame 3
#3  0x081bbf90 in compPositionWindow (pWin=0x8927c28, x=601, y=164) at
compwindow.c:132
132             abort ();
(gdb) print pWin->redirectDraw
$1 = 1
(gdb) print pWin->viewable
$2 = 0
(gdb) print GetCompWindow(pWin)
$3 = (struct _CompWindow *) 0x8847180
--------------------------------------------------

Here's partially the output of 'bt full':
--------------------------------------------------
#3  0x081bbf90 in compPositionWindow (pWin=0x8927c28, x=601, y=164) at
compwindow.c:132
        pScreen = 0x88198b0
        cs = 0x8801a88
        ret = 1
#4  0x081e61b0 in miMoveWindow (pWin=0x8927c28, x=601, y=164,
pNextSib=0x88c6d70, kind=VTMove) at miwindow.c:528
        pParent = 0x8878bf8
        WasViewable = 0
        bw = 1
        oldRegion = 0x0
        oldpt = {x = 1011, y = 421}
        anyMarked = 0
        pScreen = 0x88198b0
        windowToValidate = 0x62
        dosave = 0
        pLayerWin = 0x0
#5  0x081bc565 in compMoveWindow (pWin=0x8927c28, x=600, y=163, pSib=0x88c6d70,
kind=VTMove) at compwindow.c:300
        pScreen = 0x88198b0
        cs = 0x8801a88
#6  0x080fc7a5 in ConfigureWindow (pWin=0x8927c28, mask=3, vlist=0xafb77014,
client=0x88c1a50) at window.c:2476
        pSib = 0x88c6d70
        pParent = 0x8878bf8
        sibwid = 0
        index2 = 5
        tmask = 0
        pVlist = (XID *) 0xafb7701c
        x = 600
        y = 163
        beforeX = 1010
        beforeY = 420
        w = 96
        h = 212
        bw = 1
        action = 1
        smode = 0
        win_owner = 0x88c1a50
        ag_leader = 0x0
        event = [...snipped, huge event struct...]
#7  0x080d347b in ProcConfigureWindow (client=0x88c1a50) at dispatch.c:771
        pWin = 0x8927c28
        stuff = (xConfigureWindowReq *) 0xafb77008
        result = 16
        len = 2
#8  0x080d2abc in Dispatch () at dispatch.c:455
        clientReady = (int *) 0xbffff084
        result = 20
        client = 0x88c1a50
        nready = 0
        icheck = (HWEventQueuePtr *) 0x826ed84
        start_tick = 4840
#9  0x080eaa96 in main (argc=2, argv=0xbffff544, envp=0xbffff550) at main.c:442
        i = 1
        j = 2
        k = 2
        error = 0
        xauthfile = 0x0
        alwaysCheckForInput = {0, 1}
--------------------------------------------------
Comment 1 Adam Jackson 2004-08-09 20:33:41 UTC

*** This bug has been marked as a duplicate of 998 ***

Use of freedesktop.org services, including Bugzilla, is subject to our Code of Conduct. How we collect and use information is described in our Privacy Policy.