[PATCH libXi] Don't use raw serial numbers in XIEvents

Peter Hutterer peter.hutterer at who-t.net
Mon Oct 19 17:30:02 PDT 2015


On Mon, Oct 19, 2015 at 04:28:12PM -0700, Jasper St. Pierre wrote:
> On Sun, Oct 18, 2015 at 7:59 PM, Peter Hutterer
> <peter.hutterer at who-t.net> wrote:
> > cookie->serial is an Xlib contoction, provided by _XSetLastRequestRead(). This
> 
> I assume this is meant to read "in->sequenceNumber is an Xlib
> concoction"? Otherwise, it doesn't make sense.

no, in->serialNumber is the raw 16-bit serial number on the wire.
cookie->serial something that's cooked up inside Xlib and a combination of
last_request_read and the raw serialNumber.

the rest of Xlib uses that cooked up number (e.g. core X events), the XI2
events stick out because they use the raw serial number, which may be
different.

Cheers,
   Peter

> > serial may be different to the raw serial number from the wire protocol.
> > This causes issues when the raw serial is used to e.g. compare the event to
> > other non-XI events.
> >
> > Use the cookie's serial number instead.
> >
> > https://bugzilla.gnome.org/show_bug.cgi?id=756649
> >
> > See also https://bugs.freedesktop.org/show_bug.cgi?id=64687
> >
> > Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>
> > ---
> >  src/XExtInt.c | 16 ++++++++--------
> >  1 file changed, 8 insertions(+), 8 deletions(-)
> >
> > diff --git a/src/XExtInt.c b/src/XExtInt.c
> > index 672d69a..a35fcc6 100644
> > --- a/src/XExtInt.c
> > +++ b/src/XExtInt.c
> > @@ -1521,7 +1521,7 @@ wireToDeviceEvent(xXIDeviceEvent *in, XGenericEventCookie* cookie)
> >      out = next_block(&ptr_lib, sizeof(XIDeviceEvent));
> >      out->display = cookie->display;
> >      out->type = in->type;
> > -    out->serial = in->sequenceNumber;
> > +    out->serial = cookie->serial;
> >      out->extension = in->extension;
> >      out->evtype = in->evtype;
> >      out->send_event = ((in->type & 0x80) != 0);
> > @@ -1794,7 +1794,7 @@ wireToDeviceChangedEvent(xXIDeviceChangedEvent *in, XGenericEventCookie *cookie)
> >      cookie->data = out = malloc(sizeof(XIDeviceChangedEvent) + len);
> >
> >      out->type = in->type;
> > -    out->serial = in->sequenceNumber;
> > +    out->serial = cookie->serial;
> >      out->display = cookie->display;
> >      out->extension = in->extension;
> >      out->evtype = in->evtype;
> > @@ -1827,7 +1827,7 @@ wireToHierarchyChangedEvent(xXIHierarchyEvent *in, XGenericEventCookie *cookie)
> >      out->info           = (XIHierarchyInfo*)&out[1];
> >      out->display        = cookie->display;
> >      out->type           = in->type;
> > -    out->serial         = in->sequenceNumber;
> > +    out->serial         = cookie->serial;
> >      out->extension      = in->extension;
> >      out->evtype         = in->evtype;
> >      out->send_event = ((in->type & 0x80) != 0);
> > @@ -1868,7 +1868,7 @@ wireToRawEvent(XExtDisplayInfo *info, xXIRawEvent *in, XGenericEventCookie *cook
> >
> >      out = next_block(&ptr, sizeof(XIRawEvent));
> >      out->type           = in->type;
> > -    out->serial         = in->sequenceNumber;
> > +    out->serial         = cookie->serial;
> >      out->display        = cookie->display;
> >      out->extension      = in->extension;
> >      out->evtype         = in->evtype;
> > @@ -1919,7 +1919,7 @@ wireToEnterLeave(xXIEnterEvent *in, XGenericEventCookie *cookie)
> >      out->buttons.mask = (unsigned char*)&out[1];
> >
> >      out->type           = in->type;
> > -    out->serial         = in->sequenceNumber;
> > +    out->serial         = cookie->serial;
> >      out->display        = cookie->display;
> >      out->extension      = in->extension;
> >      out->evtype         = in->evtype;
> > @@ -1962,7 +1962,7 @@ wireToPropertyEvent(xXIPropertyEvent *in, XGenericEventCookie *cookie)
> >      cookie->data = out;
> >
> >      out->type           = in->type;
> > -    out->serial         = in->sequenceNumber;
> > +    out->serial         = cookie->serial;
> >      out->extension      = in->extension;
> >      out->evtype         = in->evtype;
> >      out->send_event = ((in->type & 0x80) != 0);
> > @@ -1983,7 +1983,7 @@ wireToTouchOwnershipEvent(xXITouchOwnershipEvent *in,
> >      cookie->data = out;
> >
> >      out->type           = in->type;
> > -    out->serial         = in->sequenceNumber;
> > +    out->serial         = cookie->serial;
> >      out->display        = cookie->display;
> >      out->extension      = in->extension;
> >      out->evtype         = in->evtype;
> > @@ -2011,7 +2011,7 @@ wireToBarrierEvent(xXIBarrierEvent *in, XGenericEventCookie *cookie)
> >
> >      out->display    = cookie->display;
> >      out->type       = in->type;
> > -    out->serial     = in->sequenceNumber;
> > +    out->serial     = cookie->serial;
> >      out->extension  = in->extension;
> >      out->evtype     = in->evtype;
> >      out->send_event = ((in->type & 0x80) != 0);
> > --
> > 2.4.3
> >
> > _______________________________________________
> > xorg-devel at lists.x.org: X.Org development
> > Archives: http://lists.x.org/archives/xorg-devel
> > Info: http://lists.x.org/mailman/listinfo/xorg-devel
> 
> 
> 
> -- 
>   Jasper


More information about the xorg-devel mailing list