summaryrefslogtreecommitdiff
path: root/src
AgeCommit message (Collapse)Author
2011-03-18Introduce xcb_wait_for_event_until, for consuming responses in wire-order.Jamey Sharp
Signed-off-by: Jamey Sharp <jamey@minilop.net> Reviewed-by: Josh Triplett <josh@freedesktop.org>
2011-03-18Dequeue readers that can't receive any new responses.Jamey Sharp
Signed-off-by: Jamey Sharp <jamey@minilop.net> Reviewed-by: Josh Triplett <josh@freedesktop.org>
2011-03-18Factor reader_list management out of wait_for_reply.Jamey Sharp
Later patches will insert reader_list entries from other entry points. Signed-off-by: Jamey Sharp <jamey@minilop.net> Reviewed-by: Josh Triplett <josh@freedesktop.org>
2011-03-14Prevent reply waiters from being blocked.Rami Ylimäki
It's possible to call xcb_wait_for_reply more than once for a single request. In this case we are nice and let reply waiters continue so that they can notice that the reply is not available anymore. Otherwise an event waiter could just signal the reply waiter that got its reply to continue but leave a waiter for an earlier reply blocked. Below is an example sequence for reproducing this problem. thread #1 (XNextEvent) - waits for events thread #2 (XSync) - executes request #2 - waits for reply #2 thread #1 - reads reply #2 - signals waiter of reply #2 to continue - waits for events thread #2 - handles reply #2 thread #3 (XCloseDisplay) - executes request #3 - waits for reply #2 thread #1 - reads reply #3 - nobody is waiting for reply #3 so don't signal - wait for events Of course it may be questionable to wait for a reply twice, but XCB should be smart enough to let clients continue if they choose to do so. Signed-off-by: Rami Ylimäki <rami.ylimaki@vincit.fi> Signed-off-by: Jamey Sharp <jamey@minilop.net>
2011-03-13Merge branch 'master' of git+ssh://git.freedesktop.org/git/xcb/libxcbJamey Sharp
Apparently I forgot to push these months ago.
2011-01-27Don't try to sizeof(void)Peter Harris
sizeof(void) is a gcc extension, and not portable. Xorg Bugzilla 31959 http://bugs.freedesktop.org/show_bug.cgi?id=31959 http://lists.freedesktop.org/archives/xcb/2010-May/006039.html Signed-off-by: Peter Harris <pharris@opentext.com> Tested-by: Cyril Brulebois <kibi@debian.org>
2011-01-20fix Windows build and installationVincent Torri
2010-12-23Merge branch 'master' of git://anongit.freedesktop.org/~peterh/libxcbPeter Harris
2010-12-12Don't validate FD_SETSIZE on Win32Jeetu Golani
Windows' file handles have never been small or consecutive, so Windows' select has always been implemented the same way as everyone else's poll. On Windows, FD_SETSIZE is the size of the poll array, not the maximum SOCKET number. Signed-off-by: Peter Harris <git@peter.is-a-geek.org>
2010-11-27xcb_take_socket: Document sequence wrap requirementsUli Schlachter
If lots of requests are send without one causing a reply, xcb can get confused about the current sequence number of a reply. Document the requirements of an external socket owner to avoid this problem. The return_socket callback for xcb_take_socket() originally was supposed to return the last sequence number used, but the version committed to libxcb never actually had this signature. This fixes the function's documentation not to mention this non-existent return value. Signed-off-by: Uli Schlachter <psychon@znc.in> Signed-off-by: Julien Danjou <julien@danjou.info>
2010-11-23xcb_auth: Fix memory leak in _xcb_get_auth_info.Nick Bowler
If the initial get_peer_sock_name(getpeername ...) succeeds, the pointer to allocated memory is overwritten by the later call to get_peer_sock_name(getsockname ...). Fix that up by freeing the allocated memory before overwriting the pointer. Signed-off-by: Nick Bowler <nbowler@draconx.ca> Signed-off-by: Julien Danjou <julien@danjou.info>
2010-10-09xcb_in: Use 64-bit sequence numbers internally everywhere.Jamey Sharp
Widen sequence numbers on entry to those public APIs that still take 32-bit sequence numbers. Signed-off-by: Jamey Sharp <jamey@minilop.net>
2010-10-09xcb_discard_reply: Simplify by re-using poll_for_reply helper.Jamey Sharp
If you discard a sequence number that has multiple responses already read, this will do more allocations than necessary. But nobody cares about ListFontsWithInfo. Signed-off-by: Jamey Sharp <jamey@minilop.net>
2010-10-09xcb_request_check: Hold the I/O lock while deciding to sync.Jamey Sharp
Signed-off-by: Jamey Sharp <jamey@minilop.net>
2010-10-09xcb_send_request: Send all requests using a common internal send_request.Jamey Sharp
This simplifies the critical section of xcb_send_request and fixes a couple of subtle bugs: - It's possible for xcb_send_request to need to issue two sync requests before it can issue the real request. Previously, we counted sequence numbers as if both were issued, but only one went out on the wire. - The test for whether to sync at 32-bit sequence number wrap has been incorrect since we switched to 64-bit sequence numbers internally. This change means that if the output queue was already full and the current request is bigger than the output queue, XCB will do one more write syscall than it did before. But syncs are rare and small requests are the norm, so this shouldn't be a measurable difference. Signed-off-by: Jamey Sharp <jamey@minilop.net>
2010-09-22Fix _unserialize of reply headersPeter Harris
This cleans up a number of warnings, and passes the sequence number through correctly. Signed-off-by: Peter Harris <pharris@opentext.com>
2010-09-22Clean up a couple of warnings in xprintPeter Harris
Signed-off-by: Peter Harris <pharris@opentext.com>
2010-09-22Make *_unserialize safe to use on buffers in-placePeter Harris
By calling memmove instead of memcpy, and walking the buffer backward from the end, *_unserialize is safe to use in-place. Signed-off-by: Peter Harris <pharris@opentext.com>
2010-09-22Fix memory leak in _sizeof implemented with _unserializePeter Harris
Signed-off-by: Peter Harris <pharris@opentext.com>
2010-09-22Don't emit out-of-module sizeof definitionsPeter Harris
Signed-off-by: Peter Harris <pharris@opentext.com>
2010-09-19Allow disconnecting connections that are in error state.Josh Triplett
In support of this, consolidate the two static error_connection definitions into one so we don't try to free the static out-of-memory error_connection. Commit by Josh Triplett and Jamey Sharp. Signed-off-by: Josh Triplett <josh@joshtriplett.org> Signed-off-by: Jamey Sharp <jamey@minilop.net>
2010-09-10Add xkb.* to gitignorePeter Harris
Signed-off-by: Peter Harris <pharris@opentext.com>
2010-09-08Merge branch 'gsoc2010' of git://anongit.freedesktop.org/~chr/libxcbPeter Harris
2010-09-04_xcb_conn_wait: Shut down the connection on unexpected poll() events.Jamey Sharp
If a client calls close(2) on the connection's file descriptor and then flushes writes, libxcb causes a hang in the client. Any flush eventually calls _xcb_out_send() with has the following loop: while(ret && *count) ret = _xcb_conn_wait(c, &c->out.cond, vector, count); _xcb_conn_wait(), if built with USE_POLL, gets the POLLNVAL error. It only checks for POLLIN and POLLOUT though, ignoring the error. Return value is 1, count is unmodified, leaving us with an endless loop and a client hang. XTS testcase Xlib3/XConnectionNumber triggers this bug. It creates a display connection, closes its file descriptor, tries to send a no-op, and then expects an error. http://cgit.freedesktop.org/xorg/test/xts/tree/xts5/Xlib3/XConnectionNumber.m If poll returned POLLHUP or POLLERR, we might see the same result. If poll returns any event we didn't ask for, this patch causes _xcb_conn_shutdown() to be invoked and an error returned. This matches the behaviour if select(2) is used instead of poll(2): select(2) returns -1 and EBADF for an already closed file descriptor. I believe this fix both is safe and will handle any similar error. POSIX says that the only bits poll is permitted to set in revents are those bits that were set in events, plus POLLHUP, POLLERR, and POLLNVAL. So if we see any flags we didn't ask for then something has gone wrong. Patch inspired by earlier proposals from Peter Hutterer and Aaron Plattner--thanks! Reported-by: Peter Hutterer <peter.hutterer@who-t.net> Reported-by: Aaron Plattner <aplattner@nvidia.com> Signed-off-by: Jamey Sharp <jamey@minilop.net> Reviewed-by: Aaron Plattner <aplattner@nvidia.com> Reviewed-by: Peter Hutterer <peter.hutterer@who-t.net> Tested-by: Aaron Plattner <aplattner@nvidia.com> Cc: Peter Hutterer <peter.hutterer@who-t.net> Cc: Dan Nicholson <dbn.lists@gmail.com> Signed-off-by: Peter Harris <pharris@opentext.com>
2010-08-31Merge branch 'master' of git://github.com/topcat/xcb-win32Peter Harris
Conflicts: src/xcb_conn.c src/xcb_util.c Signed-off-by: Peter Harris <pharris@opentext.com>
2010-08-25xcb_disconnect: call shutdown() to force a disconnectAaron Plattner
Fixes the X Test Suite's XCloseDisplay-6 test, which has this (admittedly ridiculous) behavior: 1. Create a window w. 2. Open two display connections, dpy1, and dpy2. 3. Grab the server using dpy1. 4. Fork. 5 (child). XSetProperty on w using dpy2. 5 (parent). Verify that no event was recieved on dpy1. 6 (parent). XCloseDisplay(dpy1). 6 (child). Verify that an event was received on dpy2. It was failing because at step 6 (child), the server had not actually ungrabbed yet because the file descriptor for dpy1 was still open in the child process. Shutting down the socket during XCloseDisplay matches the behavior of non-XCB Xlib, which calls shutdown() from _X11TransSocketDisconnect. Thanks to Julien Cristau for noticing this. Signed-off-by: Aaron Plattner <aplattner at nvidia.com> Reviewed-by: Julien Cristau <jcristau@debian.org> Signed-off-by: Peter Harris <pharris@opentext.com>
2010-08-24xcb_request_check: Sync even if an event was read for this sequence.Jamey Sharp
This fixes the test case I have so far for Havoc's report that xcb_request_check hangs. Rationale: Since we have a void cookie, request_expected can't have been set equal to this sequence number when the request was sent; it can only have become equal due to the arrival of an event or error. If it became equal due to an event then we still need to sync. If it became equal due to an error, then request_completed will have been updated, which means we correctly won't sync. Fixes: https://bugs.freedesktop.org/show_bug.cgi?id=29599 However, Havoc reports that he can still reproduce the problem, so we may be revisiting this later. Reported-by: Havoc Pennington <hp@pobox.com> Signed-off-by: Jamey Sharp <jamey@minilop.net>
2010-08-16small fix to get rid of some compiler warningsChristoph Reimann
also added very basic documentation for xkb
2010-08-16added accessors for special casesChristoph Reimann
major bugfixes include: rewrite of prefix related functions, merge of serialize/unserialize/... generators, extended field name resolution
2010-08-08special case 'intermixed variable and fixed size fields': fixed reply side, ↵Christoph Reimann
needs testing
2010-08-05renamed most _unserialize() functions to _sizeof() and fixed _unserialize() ↵Christoph Reimann
for the special case of intermixed variable and fixed size fields
2010-08-02attempt to fix special case: variable fields followed by fixed size fieldsChristoph Reimann
2010-08-01bug fixes for all kinds of 'special cases'Christoph Reimann
2010-07-22partial rewrite of serialize helper functions completed;Christoph Reimann
_serialize() & _unserialize() have been tested for switch derived from valueparam
2010-07-20preliminary handling of further special cases in unserializeChristoph Reimann
first attempts to unify serialize and unserialize
2010-07-15added generating code for _serialize() in case of variable sized structs ↵Christoph Reimann
(largely untested)
2010-07-13new and still preliminary functions for switch; feautures includeChristoph Reimann
- API compatibility with valueparam - request _aux() auxiliary functions - _serialize() and _unserialize() auxiliary functions - new data type that allows mixing of fixed and variable size members
2010-07-13xkb: updated configure.ac/Makefile.amChristoph Reimann
2010-07-13added xcb_sumof() with restriction to uint8_tChristoph Reimann
2010-07-13_xcb_conn_wait: Fix whitespace.Jamey Sharp
Signed-off-by: Jamey Sharp <jamey@minilop.net>
2010-06-15xcb_connect_to_display_with_auth_info: Fix memory leakPauli Nieminen
protocol and host are allocated in _xcb_parse_display but ownership of them is passed to the caller. They have to be freed in xcb_connect_to_display_with_auth_info. Signed-off-by: Pauli Nieminen <ext-pauli.nieminen@nokia.com> Signed-off-by: Peter Harris <pharris@opentext.com>
2010-06-15_xcb_parse_display: Fix error pathPauli Nieminen
xcb_parse_display claims that there is no side effects when failing. That requires _xcb_parse_display to free the memory in failure case. Signed-off-by: Pauli Nieminen <ext-pauli.nieminen@nokia.com> Signed-off-by: Peter Harris <pharris@opentext.com>
2010-05-14xcb_open: Improve protocol/host parsingJeremy Huddleston
Support scenarios where host is not set and protocol is. eg: DISPLAY=tcp/:0 as well as the "inet" and "inet6" alias for "tcp" for compatability with Xlib Signed-off-by: Jeremy Huddleston <jeremyhu@apple.com> Reviewed-by: Jamey Sharp <jamey@minilop.net>
2010-05-14Add ~ operator support in code generatorMarcin Kościelnicki
Reviewed-by: Julien Cristau <jcristau@debian.org> Signed-off-by: Julien Danjou <julien@danjou.info>
2010-04-30Fix GCC error on undeclared variable when not using abstract socketArnaud Fontaine
This is a regression found by tinderbox in previous commit: xcb_util.c: In function '_xcb_open': xcb_util.c:213: error: 'fd' undeclared (first use in this function)
2010-04-30Get rid of PATH_MAX and MAXPATHLENArnaud Fontaine
There could be no upper limit on the length of a path according to POSIX, therefore these macros may not be defined at all on some systems (such as GNU Hurd). Signed-off-by: Arnaud Fontaine <arnau@debian.org> Reviewed-by: Peter Harris <pharris@opentext.com>
2010-04-23Use limits.h instead of syslimits.hJeremy Huddleston
Regression found by tinderbox in 89b3485dadef47a30264a5bf150b96522183376b xcb_util.c:31:27: error: sys/syslimits.h: No such file or directory xcb_util.c: In function '_xcb_open': xcb_util.c:148: error: 'PATH_MAX' undeclared (first use in this function) Signed-off-by: Jeremy Huddleston <jeremyhu@apple.com>
2010-04-23Reworked launchd support to work better with _xcb_parse_displayJeremy Huddleston
Fixes: http://xquartz.macosforge.org/trac/ticket/390 Signed-off-by: Jeremy Huddleston <jeremyhu@apple.com>
2010-04-23Replaced read() in read_block and _xcb_in_read() with recv for allJeetu Golani
platforms. MSG_WAITALL is undefined in MinGW so it's been explicitly defined in xcb_in.c
2010-04-22Set errno=0 in read_block. On Win32 there is no errno and this makes theJeetu Golani
do..while loop execute only once. Also set the return value to -1 in _xcb_open if control reaches the end - if all goes well it shouldn't reach there.