Bug 24046

Summary: Assertion failed: dpy->xcb->reply_data != NULL while running xmodmap
Product: xorg Reporter: Yevgeniy <YLitvinenko>
Component: * OtherAssignee: Xorg Project Team <xorg-team>
Status: RESOLVED FIXED QA Contact: Xorg Project Team <xorg-team>
Severity: critical    
Priority: high CC: peter.hutterer
Version: git   
Hardware: x86 (IA32)   
OS: Solaris   
Whiteboard:
i915 platform: i915 features:

Description Yevgeniy 2009-09-20 11:18:06 UTC
When I try to run xmodmap I get an error:
$ xmodmap
Assertion failed: dpy->xcb->reply_data != NULL, file ../../libX11-1.2.99.901/src/xcb_io.c, line 542, function _XRead
Abort(coredump)

I run xmodmap in mdb and got:
$ mdb /usr/X11R7/bin/xmodmap
> :r
mdb: warning: librtld_db failed to initialize; shared library information will not be available
Assertion failed: dpy->xcb->reply_data != NULL, file ../../libX11-1.2.99.901/src/xcb_io.c, line 542
mdb: stop on SIGABRT
mdb: target stopped at:
libc_hwcap1.so.1`_lwp_kill+0x15:jae    +0xc     <libc_hwcap1.so.1`_lwp_kill+0x23>
> ::stack
libc_hwcap1.so.1`_lwp_kill+0x15(1, 6, 8047778, ce7fabde)
libc_hwcap1.so.1`raise+0x22(6, 0, 80477c8, ce7d205a)
libc_hwcap1.so.1`abort+0xf2(65737341, 6f697472, 6166206e, 64656c69, 7064203a, 783e2d79)
libc_hwcap1.so.1`_assert+0x82(ce976312, ce97620c, 21e, ce9dd70c, 0, 804e950)
libX11.so.6.3.0`_XRead+0x120(804e950, 805b1f8, 5c, ce9dd70c, 804e950, 5c)
libX11.so.6.3.0`_XReadPad+0x38(804e950, 805b1f8, 5c, 0, ce700878, 8047ab0)
libX11.so.6.3.0`XGetModifierMapping+0xb1(804e950, ce9f03c8, 8047ad8, 804bfc2, 804e950, 804e940)
initialize_map+0x13(804e950, 804e940, 804e938, cea287a4, ce9f03c8, ce777e71)
main+0xc2(8049170, 1, 8047b00)
_start+0x80(1, 8047bfc, 0, 8047c04, 8047c15, 8047c28)
>


Inside xmodmap (file xmodmap.c in xmodmap.git)
There are three calls to X function before error occurs
1 file xmodmap.c: dpy = XOpenDisplay (displayname);
  after call dpy->xcb->reply_data == 0
2 file xmodmap.c: XDisplayKeycodes (dpy, &min_keycode, &max_keycode);
  after call dpy->xcb->reply_data == 0
3 file handle.c: map = XGetModifierMapping (dpy); <- here I get the error


Inside function XGetModifierMapping (file ModMap.c in libX11)
there is a call
(void) _XReply (dpy, (xReply *)&rep, 0, xFalse);
which returns dpy->xcb->reply_data == 0

Inside function _XReply (file xcb_io.c in libX11)
reply = xcb_wait_for_reply(c, current->sequence, &error);
This call returns 0 when error occurs

Before error there are three successful xcb_wait_for_reply calls.

I added fprintf in files ModMap.c and xcb_io.c
(like this - fprintf (stderr, "Before xcb_wait_for_reply: reply: %p; c: %p; current->sequence: %i; error: %p\n", reply, c, current->sequence, error);)
and got:

$ xmodmap
Before xcb_wait_for_reply: reply: 0; c: 804ff28; current->sequence: 4; error: 80479f0
After xcb_wait_for_reply: reply: 805a738; c: 804ff28; current->sequence: 4; error: 0

Before xcb_wait_for_reply: reply: 0; c: 804ff28; current->sequence: 5; error: 18c1f2e
After xcb_wait_for_reply: reply: 805a738; c: 804ff28; current->sequence: 5; error: 0

Before xcb_wait_for_reply: reply: 0; c: 804ff28; current->sequence: 6; error: 98
After xcb_wait_for_reply: reply: 805a738; c: 804ff28; current->sequence: 6; error: 0

Before _XReply: dpy->xcb->reply_data 0
Before xcb_wait_for_reply: reply: 0; c: 804ff28; current->sequence: 7; error: 5a70837
After xcb_wait_for_reply: reply: 0; c: 804ff28; current->sequence: 7; error: 0
After _XReply: dpy->xcb->reply_data 0
Before _XReadPad: dpy->xcb->reply_data 0
Assertion failed: dpy->xcb->reply_data != NULL, file ../../libX11-1.2.99.901/src/xcb_io.c, line 547, function _XRead
Abort(coredump)



libX11:
commit 19cc5e1fa17a285045662820a8b4de2a0f9a194d
Date:   Fri Sep 18 17:10:04 2009 -0700

xmodmap:
commit 4da097462b0b899e1790fd5a5f5e8ec811623c3d
Date:   Mon May 11 10:16:29 2009 -0700
Comment 1 Peter Hutterer 2009-09-20 23:40:03 UTC
which version of the server are you running and what's the full command you passed into xmodmap?
Comment 2 Yevgeniy 2009-09-21 01:27:25 UTC
(In reply to comment #1)
> which version of the server are you running and what's the full command you
> passed into xmodmap?

xserver from git
commit 24716b9254fa7d609792596723a192bb044a7d3f
Date:   Fri Aug 28 22:52:48 2009 -0400

From Xorg.0.log:
X.Org X Server 1.6.99.1
Release Date: (unreleased)
X Protocol Version 11, Revision 0
Build Operating System: SunOS 5.11 i86pc
Current Operating System: SunOS solaris 5.11 snv_122 i86pc
Build Date: 31 August 2009  10:56:48PM

'xmodmap -display' runs without the error.
It prints usage and available options.

'xmodmap -display :0.1'
:0.1 incorrect display gives message
xmodmap:  unable to open display ':0.1'

'xmodmap -display :0.0' (:0.0 - correct display) and all other options (and without any options) give the error.
Comment 3 Yevgeniy 2009-09-21 04:17:28 UTC
I've just cloned xserver from git and built it. Error the same.

'git log' shows last commit -
commit d3a3c904e5e3b5e8bb3c51ca6a563880ff589bf3
Date:   Mon Sep 21 09:41:46 2009 +1000
Comment 4 Michel Dänzer 2010-02-19 02:33:43 UTC
Yevgeniy, are you still seeing this with xserver 1.7.x releases?

(Looks like bug 20357 BTW)
Comment 5 Yevgeniy 2010-02-24 03:34:51 UTC
Now I am using Xorg 1.7.4 provided with OpenSolaris b132 so my check may be incorrect. But xmodmap (compiled from source) works fine.

I checked that xmodmap uses X libraries compiled from source (not provided with OS)
Comment 6 Michel Dänzer 2010-02-24 03:43:29 UTC
Thanks for the update, let's assume it's been fixed. Please reopen if you see it again.

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.