summaryrefslogtreecommitdiff
path: root/src/xcbint.h
AgeCommit message (Collapse)Author
2013-11-18Revert "fix deadlock with xcb_take_socket/return_socket v3"Uli Schlachter
This reverts commit 9ae84ad187e2ba440c40f44b8eb21c82c2fdbf12. After this patch was merged, there were complaints about it not being a good idea. Revert this for now until we can agree on this. References: http://lists.freedesktop.org/archives/xcb/2013-June/008340.html Signed-off-by: Uli Schlachter <psychon@znc.in> Conflicts: src/xcbint.h
2013-11-07Switch to using the CMSG_* macros for FD passingKeith Packard
Use these instead of computing the values directly so that it might work on BSD or other non-Linux systems Signed-off-by: Keith Packard <keithp@keithp.com> Reviewed-by: Alan Coopersmith <alan.coopersmith@oracle.com> Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com>
2013-11-07Add event queue splittingKeith Packard
This allows apps to peel off certain XGE events into separate queues for custom handling. Designed to support the Present extension Signed-off-by: Keith Packard <keithp@keithp.com> Reviewed-By: Uli Schlachter <psychon@znc.in>
2013-11-07Add support for receiving fds in repliesKeith Packard
Requests signal which replies will have fds, and the replies report how many fds they expect in byte 1. Signed-off-by: Keith Packard <keithp@keithp.com> Reviewed-By: Uli Schlachter <psychon@znc.in>
2013-11-07Add xcb_send_fd APIKeith Packard
This uses sendmsg to transmit file descriptors from the application to the X server Signed-off-by: Keith Packard <keithp@keithp.com> Reviewed-By: Uli Schlachter <psychon@znc.in>
2013-06-01fix deadlock with xcb_take_socket/return_socket v3Christian König
To prevent different threads from stealing the socket from each other the caller of "xcb_take_socket" must hold a lock that is also acquired in "return_socket". Unfortunately xcb tries to prevent calling return_socket from multiple threads and this can lead to a deadlock situation. A simple example: - X11 has taken the socket - Thread A has locked the display. - Thread B does xcb_no_operation() and thus ends up in libX11's return_socket(), waiting for the display lock. - Thread A calls e.g. xcb_no_operation(), too, ends up in return_socket() and because socket_moving == 1, ends up waiting for thread B => Deadlock This patch allows calling return_socket from different threads at the same time an so resolves the deadlock situation. Partially fixes: https://bugs.freedesktop.org/show_bug.cgi?id=20708 v2: fixes additional pthread_cond_wait dependencies, rework comments and patch description v3: separate pthread_cond_wait dependencies and unrelated whitespace change into their own patch, use unsigned for socket_seq Signed-off-by: Christian König <christian.koenig@amd.com> Signed-off-by: Uli Schlachter <psychon@znc.in>
2012-01-11Added more error states and removed global error_connectionArvind Umrao
Fixes: https://bugs.freedesktop.org/show_bug.cgi?id=41443 Fixes: https://bugs.freedesktop.org/show_bug.cgi?id=42304 I have added more xcb connection error states at xcb.h header. Also I have removed global error_connection variable, and added an interface that returns connection error state. TBD: I will segregate errors states in a separate header file and try to provide more precise error states, in future. Also I will give patch for libX11, in that patch xcb_connection_t::has_error will be passed to default io handler of libX11. This value can then be used for displaying error messages. Reviewed-by: Rami Ylimäki <rami.ylimaki@vincit.fi> Reviewed-by: Uli Schlachter <psychon@znc.in> Signed-off-by: Arvind Umrao <arvind.umrao@oracle.com>
2011-04-12Revert "Introduce xcb_wait_for_event_until, for consuming responses in ↵Jamey Sharp
wire-order." This function was intended to allow libX11 to fix a multi-threaded hang, but the corresponding libX11 patch caused single-threaded apps to spin sometimes. Since I've retracted that patch, this patch has no users and shouldn't go into a release unless/until that changes. This reverts commit 2415c11dec5e5adb0c17f98aa52fbb371a4f8f23. Conflicts: src/xcb.h src/xcb_in.c Signed-off-by: Jamey Sharp <jamey@minilop.net>
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>
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_request_check: Hold the I/O lock while deciding to sync.Jamey Sharp
Signed-off-by: Jamey Sharp <jamey@minilop.net>
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-04-17Always wake up readers after writing.Jamey Sharp
Since writers must make sure they read as well, threads may have gone to sleep waiting for the opportunity to read. The writer must wake up one of those readers or the application can hang. Signed-off-by: Jamey Sharp <jamey@minilop.net> Reviewed-by: Josh Triplett <josh@freedesktop.org>
2010-04-17Delete a useless level of indirection from _xcb_out_send's parameters.Jamey Sharp
_xcb_out_send needs _xcb_conn_wait to store back its progress so it can be reinvoked to pick up where it left off---but then _xcb_out_send guarantees that it leaves either an empty output vector or a shut-down connection, so *its* callers never care how much progress was made. Signed-off-by: Jamey Sharp <jamey@minilop.net> Reviewed-by: Josh Triplett <josh@freedesktop.org>
2009-04-10auth: use snprintf() return valueJulien Danjou
That save us from a strlen(). Signed-off-by: Julien Danjou <julien@danjou.info>
2008-10-29Support handing off socket write permission to external code.Josh Triplett
Libraries like Xlib, some XCB language bindings, and potentially others have a common problem: they want to share the X connection with XCB. This requires coordination of request sequence numbers. Previously, XCB had an Xlib-specific lock, and allowed Xlib to block XCB from making requests. Now we've replaced that lock with a handoff mechanism, xcb_take_socket, allowing external code to ask XCB for permission to take over the write side of the socket and send raw data with xcb_writev. The caller of xcb_take_socket must supply a callback which XCB can call when it wants the write side of the socket back to make a request. This callback synchronizes with the external socket owner, flushes any output queues if appropriate, and then returns the sequence number of the last request sent over the socket. Commit by Josh Triplett and Jamey Sharp. Handoff mechanism inspired by Keith Packard.
2008-10-29Track 64-bit sequence numbers internally.Jamey Sharp
External APIs that used 32-bit sequence numbers continue to do so. Commit by Josh Triplett and Jamey Sharp.
2008-10-29Inline _xcb_lock_io, _xcb_unlock_io, and _xcb_wait_io.Jamey Sharp
These functions are once again a single pthread call, so just make that call directly.
2008-10-29Remove libxcb-xlib and xcbxlib.h.Jamey Sharp
2008-10-14allow compile-time setting for XCB queue buffer sizeJulien Danjou
Signed-off-by: Julien Danjou <julien@danjou.info>
2007-10-28Factor pthread_cond_wait(iolock) to _xcb_wait_io.Jamey Sharp
This parallels the _xcb_lock_io and _xcb_unlock_io factoring.
2007-10-23Don't abort() on locking assertions if LIBXCB_ALLOW_SLOPPY_LOCK is set.Jamey Sharp
But do still print a full backtrace, on platforms where that's supported. This commit follows the spirit of Novell's libxcb-sloppy-lock.diff. I strongly opposed proposals like this one for a long time. Originally I had a very good reason: libX11, when compiled to use XCB, would crash soon after a locking correctness violation, so it was better to have an informative assert failure than a mystifying crash soon after. It took some time for me to realize that I'd changed the libX11 implementation (for unrelated reasons) so that it could survive most invalid locking situations, as long as it wasn't actually being used from multiple threads concurrently. The other thing that has changed is that most of the code with incorrect locking has now been fixed. The value of the assert is accordingly lower. However, remaining broken callers do need to be fixed. That's why libXCB will still noisily print a stacktrace (if possible) on each assertion failure, even when assert isn't actually invoked to abort() the program; and that's why aborting is still default. This environment variable is provided only for use as a temporary workaround for broken applications. Signed-off-by: Jamey Sharp <jamey@minilop.net> Acked-by: Josh Triplett <josh@freedesktop.org>
2006-11-20Refactor auth code to get display number from xcb_connectJosh Triplett
Change xcb_connect to pass the display number to _xcb_get_auth_info, which passes it to get_authptr. This allows get_authptr to stop hacking the display number out of the sockaddrs of various address families, such as port - X_TCP_PORT, or the number after the last X in the UNIX socket path. This also removes a portability bug introduced during the IPv6 changes: relying on '\0'-termination of the UNIX socket path in a sockaddr_un. Commit by Jamey Sharp and Josh Triplett.
2006-11-18Provide xcb_prefetch_maximum_request_length counterpart to ↵Jamey Sharp
xcb_get_maximum_request_length.
2006-10-04Add xcb_xlib_lock and xcb_xlib_unlock, a special-purpose two-level recursive ↵Jamey Sharp
lock just for libX11.
2006-10-04Factor out pthread_mutex_lock and unlock calls for the iolock.Jamey Sharp
2006-09-23The Great XCB RenamingJosh Triplett
Rename API to follow a new naming convention: * XCB_CONSTANTS_UPPERCASE_WITH_UNDERSCORES * xcb_functions_lowercase_with_underscores * xcb_types_lowercase_with_underscores_and_suffix_t * expand all abbreviations like "req", "rep", and "iter" Word boundaries for the names in the protocol descriptions fall: * Wherever the protocol descriptions already have an underscore * Between a lowercase letter and a subsequent uppercase letter * Before the last uppercase letter in a string of uppercase letters followed by a lowercase letter (such as in LSBFirst between LSB and First) * Before and after a string of digits (with exceptions for sized types like xcb_char2b_t and xcb_glx_float32_t to match the stdint.h convention) Also fix up some particular naming issues: * Rename shape_op and shape_kind to drop the "shape_" prefix, since otherwise these types end up as xcb_shape_shape_{op,kind}_t. * Remove leading underscores from enums in the GLX protocol description, previously needed to ensure a word separator, but now redundant. This renaming breaks code written for the previous API naming convention. The scripts in XCB's tools directory will convert code written for the old API to use the new API; they work well enough that we used them to convert the non-program-generated code in XCB, and when run on the old program-generated code, they almost exactly reproduce the new program-generated code (modulo whitespace and bugs in the old code generator). Authors: Vincent Torri, Thomas Hunger, Josh Triplett
2006-09-21Add a private connection shutdown method for error cases.Jamey Sharp
2006-09-21Provide a "has error" property for XCBConnection.Jamey Sharp
2006-07-01Switch sequence comparisons to handle 32-bit sequence number wrap.Keith Packard
Create a macro, XCB_SEQUENCE_COMPARE, that accepts two sequence numbers and a comparison operator and correctly handles 32-bit wrap around. Rewrite all ordered sequence number comparisons to use this macro. Also, caught one error where a sequence was stored in a signed int variable. Push out a GetInputFocus request when the sequence number does wrap at 32 bits so that applications cannot see sequence 0 (as that is an error indicator).
2006-04-26Rename ConnSetup* to Setup*, Setup*Rep to Setup*, and SetupSuccess* to ↵Jamey Sharp
Setup*. Provide deprecated backwards-compatability functions and typedefs for the old names, to be removed before 1.0.
2006-03-13Remove last deprecation warning.Ian Osgood
2006-03-12Only _xcb_conn_wait calls _xcb_out_write now, so move it to xcb_conn.c and ↵Jamey Sharp
make it static.
2006-03-12Remove c->out.vec. Pass iovecs directly down the call tree. Add ↵Jamey Sharp
_xcb_out_flush_to, refactor other functions, make write_block static.
2006-03-09Move c->out.vec refs out of _xcb_conn_wait up to _xcb_out_flush.Jamey Sharp
2006-03-08Move c->out.vec refs out of _xcb_out_write up to _xcb_conn_wait.Jamey Sharp
2006-03-07Use the GCC 4 visibility extension to mark everything in xcbint.h hidden.TORRI Vincent
2006-03-05Implement provably-correct sequence wrap handling. Add flag ↵Jamey Sharp
XCB_REQUEST_DISCARD_REPLY.
2006-03-02Separate notion of request-completed from current-request, and mark requests ↵Jamey Sharp
completed more aggressively. Detects some usage errors that are otherwise undetectable.
2006-02-27_xcb_list is no longer used, so remove it. Simplify _xcb_map.Jamey Sharp
2006-02-27Replace readers generic list with hand-written typesafe version.Jamey Sharp
2006-02-26Delete unused xcb_list functions and refactor others.Jamey Sharp
2006-02-26Replace current_reply generic queue with hand-written version. No generic ↵Jamey Sharp
queues remain so delete their implementation.
2006-02-26Replace events generic queue with hand-written typesafe version.Jamey Sharp
2006-02-26API/ABI break: Add flags to XCBSendRequest, first for error-checked requests.Jamey Sharp
There's no more race condition between event and reply handling. The *RequestBlind and *RequestChecked functions are not yet implemented.
2006-02-26Replace pending_replies generic queue with a hand-implemented typesafe version.Jamey Sharp
2006-02-26Replace my old generic map ADT with a growable array for the extension cache.Jamey Sharp
2006-02-24Move _xcb_set_fd_flags to xcb_conn.c and make it static. xcb_util.c now has ↵Jamey Sharp
only public functions.
2006-02-24Move _xcb_read_block to xcb_in.c and make it static. Change calls in ↵Jamey Sharp
xcb_conn.c to _xcb_in_read_block instead.
2006-02-24Remove XCB_CEIL and use a simpler definition for XCB_PAD.Jamey Sharp