XTest and multiple pointers

Florian Echtler floe at butterbrot.org
Tue Sep 9 06:12:07 PDT 2008


> > we're currently trying to control multiple X pointers through XTest.
> > Moving them using XTestFakeDeviceMotionEvent works as expected; however,
> > sending a button event using XTestFakeDeviceButtonEvent doesn't. 
> > In fact, the test program from [1] segfaults in XNextEvent
> > (xorg/lib/libX11/src/NextEvent.c, line 51). qelt (and therefore
> > dpy->head) doesn't point anywhere sensible, so is this perhaps an
> > internal bug?
> This is usually caused by the event being passed in not being the right size.
> Xlib is picky about the size of events, so you must make sure you always pass
> in an XEvent struct (96 bytes), even if what you actually use is a
> XDeviceMotionEvent (or whatever).
> Could this be the cause of your issue?
As mentioned, we were using your test program.. and that does pass an
XEvent struct. The segfault happens here:

int
XNextEvent (
        register Display *dpy,
        register XEvent *event)
{
        register _XQEvent *qelt;

        LockDisplay(dpy);

        if (dpy->head == NULL)
            _XReadEvents(dpy);
        qelt = dpy->head;
        *event = qelt->event; // <- CRASH
        _XDeq(dpy, NULL, qelt);
        UnlockDisplay(dpy);
        return 0;
}

qelt is an invalid pointer, meaning dpy->head is invalid, too. I can't
imagine that this happens from userspace..

Thanks again, Yours, Florian
-- 
0666 - Filemode of the Beast




More information about the xorg mailing list