Summary: | xorg version 1.12.99.902 (1.13.0 RC 2) crashes with X: ../include/privates.h:123: dixGetPrivateAddr: Assertion `key->initialized' failed. | ||||||||
---|---|---|---|---|---|---|---|---|---|
Product: | xorg | Reporter: | Kevin Martin <ktmdms> | ||||||
Component: | Server/General | Assignee: | Xorg Project Team <xorg-team> | ||||||
Status: | RESOLVED FIXED | QA Contact: | Xorg Project Team <xorg-team> | ||||||
Severity: | major | ||||||||
Priority: | medium | CC: | jon.turney, peter.hutterer | ||||||
Version: | git | ||||||||
Hardware: | x86-64 (AMD64) | ||||||||
OS: | Linux (All) | ||||||||
Whiteboard: | |||||||||
i915 platform: | i915 features: | ||||||||
Attachments: |
|
Description
Kevin Martin
2012-07-23 15:32:28 UTC
I'm not sure this makes sense but reverting 0b2172d2618b801ac8e3a23a6813c7e4c5a85c7f appears to fix this for me. (In reply to comment #1) > I'm not sure this makes sense but reverting > 0b2172d2618b801ac8e3a23a6813c7e4c5a85c7f appears to fix this for me. I'd guess that it might be that reverting that commit means the swrast dri provider doesn't get linked in, so instead of ... [ 166.243] (II) AIGLX: Screen 0 is not DRI2 capable [ 166.243] (II) AIGLX: Screen 0 is not DRI capable [ 166.897] (II) AIGLX: Loaded and initialized swrast [ 166.897] (II) GLX: Initialized DRISWRAST GL provider for screen 0 ... we find no GLX providers, so GLX is disabled, so the problem is masked? Doesn't really explain how glxScreenPrivateKey appears to be uninitialized, though. Don't know if this matters but: when I run X with nouveau under 3.4.0 I have to disable nouveau acceleration (nouveau.noaccel=1) in order to get X to run. For some reason (that's been reported and is hopefully being worked on in another bugzilla) I get a GPU lockup when I have acceleration turned on with nouveau (but not with the proprietary nvidia driver) and then can't run X. I *can't* turn off acceleration under the 3.5.0 kernel (during bootup with acceleration turned off under 3.5.0 kernel the system hangs hard when loading the nouveau kernel module) so can't test there. I f I leave acceleration on with 3.5.0 then I get an X crash in libexa when I run startx (also reported as a bugzilla in freedesktop and under redhat). And reverting back to the previous x11 server, evdev, and nouveau rpms has given me back a usable system again for now. (In reply to comment #2) > (In reply to comment #1) > > I'm not sure this makes sense but reverting > > 0b2172d2618b801ac8e3a23a6813c7e4c5a85c7f appears to fix this for me. > > I'd guess that it might be that reverting that commit means the swrast dri > provider doesn't get linked in, so instead of ... > > ... we find no GLX providers, so GLX is disabled, so the problem is masked? This speculation is wrong. The truth is even stranger... # gdb X GNU gdb (Gentoo 7.3.1 p2) 7.3.1 Copyright (C) 2011 Free Software Foundation, Inc. License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html> This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. Type "show copying" and "show warranty" for details. This GDB was configured as "i686-pc-linux-gnu". For bug reporting instructions, please see: <http://bugs.gentoo.org/>... Reading symbols from /opt/jhbuild/install/bin/X...done. (gdb) b __glXScreenInit Breakpoint 1 at 0x816cfe5: file /opt/jhbuild/git/xorg/xserver/glx/glxscreens.c, line 325. (gdb) r Starting program: /opt/jhbuild/install/bin/X [...] Breakpoint 1, __glXScreenInit (pGlxScreen=0x82db9c0, pScreen=0x82d3cd0) at /opt/jhbuild/git/xorg/xserver/glx/glxscreens.c:325 325 if (!dixRegisterPrivateKey(&glxScreenPrivateKeyRec, PRIVATE_SCREEN, 0)) (gdb) bt #0 __glXScreenInit (pGlxScreen=0x82db9c0, pScreen=0x82d3cd0) at /opt/jhbuild/git/xorg/xserver/glx/glxscreens.c:325 #1 0x0816c4a3 in __glXDRIscreenProbe (pScreen=0x82d3cd0) at /opt/jhbuild/git/xorg/xserver/glx/glxdriswrast.c:474 #2 0xb79e3453 in GlxExtensionInit () at /opt/jhbuild/git/xorg/xserver/glx/glxext.c:354 #3 0x0811025c in InitExtensions (argc=1, argv=0xbffff4b4) at /opt/jhbuild/git/xorg/xserver/mi/miinitext.c:328 #4 0x0806a1d9 in main (argc=1, argv=0xbffff4b4, envp=0xbffff4bc) at /opt/jhbuild/git/xorg/xserver/dix/main.c:208 (gdb) p glxScreenPrivateKeyRec $1 = {offset = 0, size = 0, initialized = 0, allocated = 0, type = PRIVATE_XSELINUX, next = 0x0} (gdb) n 328 pGlxScreen->pScreen = pScreen; (gdb) p glxScreenPrivateKeyRec $2 = {offset = 176, size = 0, initialized = 1, allocated = 0, type = PRIVATE_SCREEN, next = 0x82ae4ec} (gdb) p &glxScreenPrivateKeyRec $3 = (DevPrivateKeyRec *) 0x82af514 (gdb) c Continuing. [...] X: /opt/jhbuild/git/xorg/xserver/include/privates.h:123: dixGetPrivateAddr: Assertion `key->initialized' failed. Program received signal SIGABRT, Aborted. 0xb7fe1416 in __kernel_vsyscall () (gdb) bt #0 0xb7fe1416 in __kernel_vsyscall () #1 0xb7a8c451 in raise () from /lib/libc.so.6 #2 0xb7a8db92 in abort () from /lib/libc.so.6 #3 0xb7a855c8 in __assert_fail () from /lib/libc.so.6 #4 0xb79e49ba in dixGetPrivateAddr (privates=0x82d3f28, key=0xb7a075ac) at /opt/jhbuild/git/xorg/xserver/include/privates.h:123 #5 0xb79e4a25 in dixGetPrivate (privates=0x82d3f28, key=0xb7a075ac) at /opt/jhbuild/git/xorg/xserver/include/privates.h:138 #6 0xb79e4adf in dixLookupPrivate (privates=0x82d3f28, key=0xb7a075ac) at /opt/jhbuild/git/xorg/xserver/include/privates.h:168 #7 0xb79e4b51 in glxGetScreen (pScreen=0x82d3cd0) at /opt/jhbuild/git/xorg/xserver/glx/glxscreens.c:194 #8 0xb79d9a21 in validGlxScreen (client=0x84ba040, screen=0, pGlxScreen=0xbffff2d4, err=0xbffff2d0) at /opt/jhbuild/git/xorg/xserver/glx/glxcmds.c:65 #9 0xb79de45c in __glXDisp_QueryServerString (cl=0x84ba114, pc=0x84c8500 "\227\023\003") at /opt/jhbuild/git/xorg/xserver/glx/glxcmds.c:2364 #10 0xb79e39e9 in __glXDispatch (client=0x84ba040) at /opt/jhbuild/git/xorg/xserver/glx/glxext.c:580 #11 0x080780f7 in Dispatch () at /opt/jhbuild/git/xorg/xserver/dix/dispatch.c:429 #12 0x0806a4b1 in main (argc=1, argv=0xbffff4b4, envp=0xbffff4bc) at /opt/jhbuild/git/xorg/xserver/dix/main.c:295 (gdb) frame 7 #7 0xb79e4b51 in glxGetScreen (pScreen=0x82d3cd0) at /opt/jhbuild/git/xorg/xserver/glx/glxscreens.c:194 194 return dixLookupPrivate(&pScreen->devPrivates, glxScreenPrivateKey); (gdb) p glxScreenPrivateKeyRec $4 = {offset = 0, size = 0, initialized = 0, allocated = 0, type = PRIVATE_XSELINUX, next = 0x0} (gdb) p &glxScreenPrivateKeyRec $5 = (DevPrivateKeyRec *) 0xb7a075ac Note that the address of glxScreenPrivateKeyRec is different! Strange things are afoot at the Circle K. Using 'info target' I can see that the first one is in the .bss for the executable, the second in the .bss for /modules/extensions/libglx.so Poking around with nm a bit more, the problem becomes more obvious: the convenience library glx/libglx.la is linked both into X and into libglx.so, so we have two instances of the static glxScreenPrivateKeyRec. Created attachment 64642 [details] [review] stop linking Xorg server against glx library I can't see the point of doing this. Applied as commit aad428b8e21c77397c623b78706eb64b1fea77c9 |
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.