With the advent of the Present extension, some events (such as PresentCompleteNotify) now use native 64-bit types on the wire. For XGE events, we insert an extra "uint32_t full_sequence" field immediately after the first 32 bytes of data. Normally, this causes the subsequent fields to be shifted over by 4 bytes, and the structure to grow in size by 4 bytes. Everything works fine. However, if event contains 64-bit extended fields, this may result in the compiler adding an extra 4 bytes of padding so that those fields remain aligned on 64-bit boundaries. This causes the structure to grow by 8 bytes, not 4. Unfortunately, XCB doesn't realize this, and always believes that the length only increased by 4. read_packet() then fails to malloc enough memory to hold the event, and the event processing code uses the wrong offsets. To fix this, mark any event structures containing 64-bit extended fields with __attribute__((__packed__)). v2: Use any(...) instead of True in (...), as suggested by Daniel Martin. v3 (Alan Coopersmith): Fix build with Solaris Studio 12.3 by moving the attribute to after the structure definition. Signed-off-by: Kenneth Graunke <kenneth@whitecape.org> Reviewed-by: Keith Packard <keithp@keithp.com> [v1] Reviewed-by: Josh Triplett <josh@joshtriplett.org> [v1] Reviewed-by: Daniel Martin <consume.noise@gmail.com> Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com> |
||
---|---|---|
doc | ||
m4 | ||
src | ||
tests | ||
tools | ||
.autom4te.cfg | ||
.gitignore | ||
COPYING | ||
INSTALL | ||
Makefile.am | ||
NEWS | ||
README | ||
autogen.sh | ||
configure.ac | ||
xcb-composite.pc.in | ||
xcb-damage.pc.in | ||
xcb-dpms.pc.in | ||
xcb-dri2.pc.in | ||
xcb-dri3.pc.in | ||
xcb-glx.pc.in | ||
xcb-present.pc.in | ||
xcb-randr.pc.in | ||
xcb-record.pc.in | ||
xcb-render.pc.in | ||
xcb-res.pc.in | ||
xcb-screensaver.pc.in | ||
xcb-shape.pc.in | ||
xcb-shm.pc.in | ||
xcb-sync.pc.in | ||
xcb-xevie.pc.in | ||
xcb-xf86dri.pc.in | ||
xcb-xfixes.pc.in | ||
xcb-xinerama.pc.in | ||
xcb-xinput.pc.in | ||
xcb-xkb.pc.in | ||
xcb-xprint.pc.in | ||
xcb-xselinux.pc.in | ||
xcb-xtest.pc.in | ||
xcb-xv.pc.in | ||
xcb-xvmc.pc.in | ||
xcb.pc.in |
About libxcb ============ libxcb provides an interface to the X Window System protocol, which replaces the current Xlib interface. It has several advantages over Xlib, including: - size: small, simple library, and lower memory footprint - latency hiding: batch several requests and wait for the replies later - direct protocol access: interface and protocol correspond exactly - proven thread support: transparently access XCB from multiple threads - easy extension implementation: interfaces auto-generated from XML-XCB Xlib can also use XCB as a transport layer, allowing software to make requests and receive responses with both, which eases porting to XCB. However, client programs, libraries, and toolkits will gain the most benefit from a native XCB port. Please report any issues you find to the freedesktop.org bug tracker, at: <https://bugs.freedesktop.org/enter_bug.cgi?product=XCB> Discussion about XCB occurs on the XCB mailing list: <mailto:xcb at lists.freedesktop.org> <http://lists.freedesktop.org/mailman/listinfo/xcb> You can obtain the latest development versions of XCB using GIT. For anonymous checkouts, use: git clone git://anongit.freedesktop.org/git/xcb/libxcb For developers, use: git clone git+ssh://git.freedesktop.org/git/xcb/libxcb