[Xcb] Segfault in XNextEvent() when using XCB
Peter Hutterer
mailinglists at who-t.net
Tue Nov 28 00:49:07 PST 2006
Hey guys,
I found a problem with running some little apps.
I use some very simple apps to check the event stream from the X
server. All of them started crashing when I started testing MPX
today. The X Server and XCB are both pulled from git (X server last
week, XCB today).
There are some weird behaviours:
* Using plain Xlib (in Ubunty Breezy) works, linking against XCB
makes it crash.
* Using PointerMotionMask as well instead of just DeviceMotion will
not crash the program,
* If I hook up xmond between the server and the client, I can see the
input extension events but they never arrive at the client. From what
I can tell by debugging the X server before they are sent out, their
values are sane.
Here is a very simple program that will crash.
=======
#include <stdio.h>
#include <X11/X.h>
#include <X11/Xlib.h>
#include <X11/extensions/XInput.h>
int main (int argc, char** argv)
{
Display* display;
Window win;
XDevice* dev;
XEventClass class_1;
XSetWindowAttributes attr;
int screen;
int win_width, win_height;
int type_1;
display = XOpenDisplay(argv[1]);
screen = DefaultScreen(display);
assert(display != NULL);
win_width = 640;
win_height = 480;
dev = XOpenDevice(display, atoi(argv[2]));
assert(dev != NULL);
DeviceMotionNotify(dev, type_1, class_1);
attr.background_pixel = WhitePixel(display, screen);
attr.event_mask = ExposureMask | StructureNotifyMask; //|
PointerMotionMask;
win = XCreateWindow(display,
RootWindow(display, 0),
0, 0,
win_width,
win_height,
7,
DefaultDepth(display, 0),
InputOutput,
DefaultVisual(display, 0),
CWBackPixel | CWEventMask,
&attr);
XMapWindow(display, win);
XSelectExtensionEvent(display, win, &class_1, 1);
XSync(display, False);
while(1)
{
XEvent e;
XNextEvent(display, &e);
XDeviceMotionEvent* mev;
switch(e.type)
{
default:
if (e.type == type_1)
{
printf("Motion notify\n");
printf(" state %d\n", mev->state);
printf(" devstate %d\n", mev->device_state);
} else
{
printf("Unknown event type %d\n", e.type);
}
break;
}
}
XCloseDisplay(display);
return 0;
}
=======
(gdb) run roo:1 2
Starting program: /home/whot/code/junk/X/XCB_segfault/xcbsegfault roo:
1 2
Unknown event type 19
Unknown event type 12
Program received signal SIGSEGV, Segmentation fault.
0xb7d5985c in memcpy () from /lib/tls/i686/cmov/libc.so.6
(gdb) bt
#0 0xb7d5985c in memcpy () from /lib/tls/i686/cmov/libc.so.6
#1 0xb7e747f2 in XNextEvent (dpy=0xbfc496e4, event=0xbfc496e4) at
NextEvent.c:52
#2 0x08048895 in main (argc=3, argv=0xbfc49844) at main.c:55
(gdb) up 1
#1 0xb7e747f2 in XNextEvent (dpy=0xbfc496e4, event=0xbfc496e4) at
NextEvent.c:52
52 *event = qelt->event;
(gdb)
Cheers,
Peter
--
Multi-Pointer X Server
http://wearables.unisa.edu.au/mpx
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.freedesktop.org/archives/xcb/attachments/20061128/bffcaa29/attachment.html
More information about the Xcb
mailing list