Commit Graph

518 Commits

Author SHA1 Message Date
Alan Coopersmith 5648ddd2b9 Define _xcb_map_new with explicit void arg list instead of empty one
Fixes Solaris Studio compiler warning:
"xcb_list.c", line 50: warning: old style function definition

and gcc warning:
xcb_list.c: In function '_xcb_map_new':
xcb_list.c:50:11: warning: old-style function definition [-Wold-style-definition]

Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com>
Reviewed-by: Josh Triplett <josh@joshtriplett.org>
2013-08-06 11:10:01 -07:00
Daniel Martin 45619dc71e c_client.py: Inject full_sequence into GE events
The generic event structure xcb_ge_event_t has the full_sequence field
at the 32byte boundary. That's why we've to inject this field into GE
events while generating the structure for them. Otherwise we would read
garbage (the internal full_sequence) when accessing normal event fields
there.

Signed-off-by: Daniel Martin <consume.noise@gmail.com>
Reviewed-by: Keith Packard <keithp@keithp.com>
Signed-off-by: Peter Harris <pharris@opentext.com>
2013-07-12 15:56:14 -04:00
Alan Coopersmith a1e67b141a Fix "indention" typos in xcb-examples.3 man page
Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com>
2013-07-08 17:54:35 -07:00
Christian König 9ae84ad187 fix deadlock with xcb_take_socket/return_socket v3
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>
2013-06-01 22:28:50 +02:00
Alan Coopersmith 1b33867fa9 integer overflow in read_packet() [CVE-2013-2064]
Ensure that when calculating the size of the incoming response from the
Xserver, we don't overflow the integer used in the calculations when we
multiply the int32_t length by 4 and add it to the default response size.

Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com>
2013-05-23 08:12:13 -07:00
Daniel Martin e602b653c1 c_client.py: Handle multiple expr. in a bitcase
Adopt a change from xcbgen. With that modification the expression in a
bitcase became a list of expressions to support multiple <enumref> in a
<bitcase>.

Signed-off-by: Daniel Martin <consume.noise@gmail.com>
Signed-off-by: Peter Harris <pharris@opentext.com>
2013-05-23 10:52:05 -04:00
Christian König 6b6044cb8a whitespace fix in xcb_take_socket
Signed-off-by: Christian König <christian.koenig@amd.com>
Signed-off-by: Jamey Sharp <jamey@minilop.net>
2013-05-15 15:10:22 -07:00
Chí-Thanh Christopher Nguyễn 76a2166de9 c_client.py: Fix python-3 invalid except statement
Replace except statement with a PEP-3110 compliant one. This fixes a regression
introduced by c3deeaf714
https://bugs.freedesktop.org/show_bug.cgi?id=55690

Reviewed-by: Peter Harris <pharris@opentext.com>
Signed-off-by: Uli Schlachter <psychon@znc.in>
2012-11-10 19:45:25 +01:00
Chí-Thanh Christopher Nguyễn 9db4517c87 c-client.py: Fix python-3 AttributeError: 'dict' object has no attribute 'iteritems'
This fixes a regression introduced by ea71d7d7e3
https://bugs.freedesktop.org/show_bug.cgi?id=55690

Reviewed-by: Peter Harris <pharris@opentext.com>
Signed-off-by: Uli Schlachter <psychon@znc.in>
2012-11-10 19:45:13 +01:00
Uli Schlachter 4f52f884f4 Include static man pages in "make dist"
This was found by distcheck. It tried to install src/man/xcb-examples.3 and
src/man/xcb-requests.3, but those files weren't in the distribution.

Fix this by explicitly telling automake to distribute those files.

Signed-off-by: Uli Schlachter <psychon@znc.in>
2012-10-05 11:23:26 +02:00
Uli Schlachter 23911a707b Fix a multi-thread deadlock
This fixes a deadlock which was seen in-the-wild with wine.

It could happen that two threads tried to read from the socket at the same time
and one of the thread got stuck inside of poll()/select().

The fix works by making sure that the writing thread doesn't steal the reading
thread's reply.

Debugged-by: Erich Hoover <ehoover@mines.edu>
Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=54671
Signed-off-by: Uli Schlachter <psychon@znc.in>
2012-09-30 10:10:18 +02:00
Uli Schlachter c16cc5467e Add a .gitignore for src/man/
Signed-off-by: Uli Schlachter <psychon@znc.in>
2012-09-25 12:31:53 +02:00
Peter Harris 08cc068ead Allow xcb_send_request with >MAX_IOV iovecs
This allows an application to do a scatter/gather operation on a large
image buffer to avoid the extra memcpy.

Use autoconf to use UIO_MAXIOV where IOV_MAX is not available (and the
POSIX minimum of 16 where neither are available).

Reviewed-by: Uli Schlachter <psychon@znc.in>
Signed-off-by: Peter Harris <pharris@opentext.com>
2012-09-18 11:42:23 -04:00
Alan Coopersmith ff53285ae3 Return connection failure if display string specifies non-existent screen
Matches the behaviour of Xlib - if you set DISPLAY to :0.1 but only have
one screen, closes connection and returns error.

This introduces a new connection error code:
XCB_CONN_CLOSED_INVALID_SCREEN

Signed-off-by: Jeremy Huddleston Sequoia <jeremyhu@apple.com>
Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com>
Reviewed-by: Jeremy Huddleston Sequoia <jeremyhu@apple.com>
Reviewed-by: Josh Triplett <josh@joshtriplett.org>
2012-08-29 22:00:55 -07:00
Alan Coopersmith b52790e8ed Always include "config.h" at the start of all C source files.
Allows configure to set defines such as _POSIX_SOURCE in config.h
that affect functions exposed by system headers and get consistent
results across all the source files.

Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com>
2012-08-25 12:34:24 -07:00
Alan Coopersmith ed93a6a2a8 Fix "sppported" typo in doxygen comment for XCB_CONN_CLOSED_EXT_NOTSUPPORTED
Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com>
2012-08-25 12:34:24 -07:00
Colin Walters c3deeaf714 c_client: Fix parallel-make issue creating 'man' directory
With make -j, it was possible to hit a race condition in the code to
make the 'man' directory.

Signed-off-by: Julien Danjou <julien@danjou.info>
2012-08-14 13:33:01 +02:00
Jeremy Huddleston 5f8f2ba1c4 xcb_connect: launchd: Don't fall back on tcp if $DISPLAY is a path to a launchd socket
Signed-off-by: Jeremy Huddleston <jeremyhu@apple.com>
2012-04-21 22:42:51 -07:00
Julien Danjou 71a295082e Move static man to man
Signed-off-by: Julien Danjou <julien@danjou.info>
2012-03-27 12:10:59 +02:00
Julien Danjou df217bf7c9 Do not list manpages, use a wildcard
Signed-off-by: Julien Danjou <julien@danjou.info>
2012-03-27 12:10:15 +02:00
Julien Danjou a4417b1611 Split manpage list in two (static/built)
Signed-off-by: Julien Danjou <julien@danjou.info>
2012-03-27 12:06:54 +02:00
Julien Danjou cc7fab2d5e Allow undocumented code to be built
Signed-off-by: Julien Danjou <julien@danjou.info>
2012-03-26 18:29:35 +02:00
Michael Stapelberg ea71d7d7e3 c_client.py: generate manpages
Signed-off-by: Julien Danjou <julien@danjou.info>
2012-03-26 18:23:56 +02:00
Uli Schlachter 236f914ea7 Fix a busy loop on BSD and Mac OS
On FreeBSD MSG_WAITALL on a non-blocking socket fails immediately if less bytes
than were asked for are available. This is different than the behavior on linux
where as many bytes as are available are returned in this case. Other OS
apparently follow the FreeBSD behavior.

_xcb_in_read() is used to fill xcb's read buffer, thus this function will call
recv() with a big length argument (xcb's read buffer is by default 16 KiB
large). That many bytes are highly unlikely to be available in the kernel
buffer.

This means that _xcb_in_read() always failed on FreeBSD. Since the socket was
still signaled as readable by poll(), this bug even resulted in a busy loop.

The same issue is present in read_block(), but here it is slightly different.
read_block() is called when we read the first few bytes of an event or a reply,
so that we already know its length. This means that we should be able to use
MSG_WAITALL here, because we know how many bytes there have to be.

However, that function could busy loop, too, when only the first few bytes of
the packet were sent while the rest is stuck somewhere on the way to us. Thus,
MSG_WAITALL should be removed here, too.

Thanks to Christoph Egger from Debian for noticing the problem, doing all the
necessary debugging and figuring out what the problem was! This patch is 99%
from debian. Thanks for all the work.

This bug was introduced in commit 2dcf8b025b.

This commit also reverts commit 9061ee45b8.

Fixes: https://bugs.freedesktop.org/show_bug.cgi?id=45776

Signed-off-by: Uli Schlachter <psychon@znc.in>
Reviewed-by: Josh Triplett <josh@joshtriplett.org>
2012-03-08 15:40:35 +01:00
Jeremy Huddleston 9061ee45b8 darwin: Use read(2) rather than recv(2)
2dcf8b025b was causing some regressions on
darwin, so go back to using read(2) there until I have time to investigate
further.

Signed-off-by: Jeremy Huddleston <jeremyhu@apple.com>
2012-03-08 00:50:13 -08:00
Julien Cristau 7d235c62f0 Fallback to TCP if no protocol is specified and the UNIX connection fails
Signed-off-by: Julien Cristau <jcristau@debian.org>
Signed-off-by: Jamey Sharp <jamey@minilop.net>
2012-02-19 14:41:17 -08:00
Jon TURNEY 68d30adde9 Update use of error_connection under WIN32 to _xcb_conn_ret_error()
Unfortunately, commit 31b57676 adding WSACleanup/WSAShutdown on Win32 adds a new use
of error_connection, which was removed in commit 769acff0, applied 5 minutes earlier.

src/xcb_util.c: In function 'xcb_connect_to_display_with_auth_info':
src/xcb_util.c:433:39: error: 'error_connection' undeclared (first use in this function)

Signed-off-by: Jon TURNEY <jon.turney@dronecode.org.uk>
Reviewed-by: Arvind Umrao <arvind.umrao@oracle.com>
Signed-off-by: Uli Schlachter <psychon@znc.in>
2012-02-09 23:05:10 +01:00
Jon TURNEY 87b7bf875e Fix build of xcb_auth.c with XDMCP on WIN32
Fix a redefinition problem which shows up when building for _WIN32 and
libXdmcp is installed, so HASXDMAUTH is enabled

It seems this is a special place in xcb as it uses other X11 library headers here

If HASXDMAUTH is defined, include the wrapped windows.h before any header which
includes it unwrapped, to avoid conflicts with types defined in X headers

We need to include config.h and check HASXDMAUTH to avoid an unconditional dependency
on x11proto headers

In file included from install/include/X11/Xdmcp.h:19:0,
                 from git/xcb/libxcb/src/xcb_auth.c:52:
install/include/X11/Xmd.h:120:14: error: conflicting types for 'INT32'
/usr/i686-pc-mingw32/sys-root/mingw/include/basetsd.h:54:13: note: previous declaration of 'INT32' was here
install/include/X11/Xmd.h:143:15: error: conflicting types for 'BOOL'
/usr/i686-pc-mingw32/sys-root/mingw/include/windef.h:234:17: note: previous declaration of 'BOOL' was here

Signed-off-by: Jon TURNEY <jon.turney@dronecode.org.uk>
Reviewed-by: Jeremy Huddleston <jeremyhu@apple.com>
2012-01-28 12:44:17 -08:00
Jeremy Huddleston 6db1a2686f Revert "Fix include order with Xdmcp on WIN32"
This reverts commit 0e9246def5.

This change caused build failures because <X11/Xdmcp.h> was never
included under any circumstance.  This is because the check for
HASXDMAUTH was moved before the inclusion of config.h (via xcbint.h)
which defined it.

Found-by: Tinderbox
Signed-off-by: Jeremy Huddleston <jeremyhu@apple.com>
Reviewed-by: Jon TURNEY <jon.turney@dronecode.org.uk>
2012-01-28 12:44:06 -08:00
Ryan Pavlik 31b57676e8 Use WSAStartup()/WSACleanup() on WIN32
The alternative is to use these in every WIN32 application which uses xcb. Doing
it this way should be safe, as, according to MSDN, "There must be a call to
WSACleanup for each successful call to WSAStartup. Only the final WSACleanup
function call performs the actual cleanup. The preceding calls simply decrement
an internal reference count"

(We should probably also include ws2_32 in Libs.private for libxcb, as anything
which links with libxcb will also need that, but there seems to be some pkg-config
issues to resolve first...)

v2: Check for errors so WSAStartup()/WSACleanup() uses are balanced
v3: Use same indentation style as surrounding code

Reviewed-by: Peter Harris <pharris@opentext.com>
Signed-off-by: Julien Danjou <julien@danjou.info>
2012-01-11 18:07:12 +01:00
Ryan Pavlik 0e9246def5 Fix include order with Xdmcp on WIN32
Fix a redefinition problem due to include order which shows up when
building for _WIN32 and libXdmcp is installed, so HASXDMAUTH is enabled

Signed-off-by: Jon TURNEY <jon.turney@dronecode.org.uk>
Reviewed-by: Peter Harris <pharris@opentext.com>
Signed-off-by: Julien Danjou <julien@danjou.info>
2012-01-11 18:03:31 +01:00
Jon TURNEY 4aa7a2c849 Fix WIN32 compilation after commit 163c47bdc0
WIN32 does not have arpa/inet.h, so do not try to include it unless _WIN32 is
not defined

Signed-off-by: Jon TURNEY <jon.turney@dronecode.org.uk>
Reviewed-by: Peter Harris <pharris@opentext.com>
Signed-off-by: Julien Danjou <julien@danjou.info>
2012-01-11 18:03:10 +01:00
Arvind Umrao 769acff0da Added more error states and removed global error_connection
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>
2012-01-11 18:01:29 +01:00
Keith Packard 9b4d6f30a3 Make xcb_take_socket keep flushing until idle
_xcb_out_flush_to will drop the iolock in pthread_cond_wait allowing
other threads to queue new requests. When this happened,
there would be requests queued for the socket after _xcb_out_flush_to
returned, and xcb_take_socket would throw an assert.

Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=29875
Signed-off-by: Keith Packard <keithp@keithp.com>
Signed-off-by: Julien Danjou <julien@danjou.info>
2012-01-11 17:49:02 +01:00
Uli Schlachter 5ceeaaa429 Fix a dead-lock due to xcb_poll_for_reply
Imagine two threads:

Thread#1: for(;;) { xcb_get_input_focus_reply(c, xcb_get_input_focus(c), 0); }

Thread#2: for(;;) { xcb_poll_for_event(c); }

Since xcb_poll_for_event() calls _xcb_in_read() directly without synchronizing
with any other readers, this causes two threads to end up calling recv() at the
same time. We now have a race because any of these two threads could get read
the GetInputFocus reply.

If thread#2 reads this reply, it will be put in the appropriate queue and
thread#1 will still be stuck in recv(), although its reply was already received.
If no other reply or event causes this thread to wake up, the process deadlocks.

To fix this, we have to make sure that there is only ever one thread reading
from the connection. The obvious solution is to check in poll_for_next_event()
if another thread is already reading (in which case c->in.reading != 0) and not
to read from the wire in this case.

This solution is actually correct if we assume that the other thread is blocked
in poll() which means there isn't any data which can be read. Since we already
checked that there is no event in the queue this means that
poll_for_next_event() didn't find any event to return.

There might be a small race here where the other thread already determined that
there is data to read, but it still has to wait for c->iolock. However, this
means that the next poll_for_next_event() will be able to read the event, so
this shouldn't cause any problems.

Fixes: https://bugs.freedesktop.org/show_bug.cgi?id=40372

Signed-off-by: Uli Schlachter <psychon@znc.in>
Signed-off-by: Peter Harris <pharris@opentext.com>
2011-09-02 13:01:34 -04:00
Jamey Sharp b12038e9ae Keep ALIGNOF definition out of the public namespace.
Uli's patch is an excellent solution; I just want to keep the new
ALIGNOF macro hidden from XCB's users, as they don't need it to call
XCB.

Signed-off-by: Jamey Sharp <jamey@minilop.net>
2011-08-24 08:52:02 -07:00
Markus Duft 163c47bdc0 Support pre-IPv6 systems (without getaddrinfo)
Some of these systems (eg. Interix on XP) are still in use.

Reviewed-by: Josh Triplett <josh@joshtriplett.org>
Signed-off-by: Peter Harris <pharris@opentext.com>
2011-08-24 10:49:06 -04:00
Uli Schlachter aa02096b8e Compute alignment correctly
The code previously assumed that everything has to be aligned to a 4 byte
boundary. This assumption is wrong as e.g. the STR struct from xproto shows.

Instead, each type has to be aligned to its natural alignment. So a char doesn't
need any alignment, a INT16 gets aligned to a 2-byte-boundary and a INT32 gets
the old 4 byte alignment.

I'm not 100% sure that this commit is correct, but some quick tests with awesome
and cairo-xcb went well.

This commit causes lots of dead assignments to xcb_align_to since only the last
field's alignment is actually used, but this simplified this patch a lot.

Fixes: https://bugs.freedesktop.org/show_bug.cgi?id=34037

Signed-off-by: Uli Schlachter <psychon@znc.in>
Signed-off-by: Peter Harris <pharris@opentext.com>
2011-08-24 10:28:49 -04:00
Michael Stapelberg 4f25ee1644 Drop AI_ADDRCONFIG when resolving TCP addresses
When a system is completely offline (no interface has an IP address but 'lo'),
xcb could not connect to localhost via TCP, e.g. connections with
DISPLAY=127.0.0.1:0 fail.

AI_ADDRCONFIG will only return IPv4 addresses if the system has an IPv4
address configured (likewise for IPv6). This also takes place when
resolving localhost (or 127.0.0.0/8 or ::1). Also, as per RFC 3493,
loopback addresses are not considered as valid addresses when
determining whether to return IPv4 or IPv6 addresses.

As per mailing-list discussion on the xcb list started with message
20110813215405.5818a0c1@x200, the AI_ADDRCONFIG flag is there for historical
reasons:

    In the old days, the "default on-link" assumption in IPv6 made the flag vey
    much indispensable for dual-stack hosts on IPv4-only networks. Without it,
    there would be long timeouts trying non-existent IPv6 connectivity. Nowadays,
    this assumption has been flagged as historic bad practice by IETF, and hosts
    should have been updated to not make it anymore.

    Then AI_ADDRCONFIG became mostly cosmetic: it avoids phony "Protocol family
    not supported" or "Host unreachable" errors while trying to connect to a dual-
    stack mode from a host with no support for source address selection.

    Nowadays, on up-to-date systems, this flag is completely useless. Then again,
    I understood only the very latest MacOS release is "up-to-date" with this
    definition.
2011-08-18 13:39:56 -07:00
James Jones 662ad589c5 Insert, not append explicit xcbgen dir python path
If a the path to the xcb python generate libs is
explicitly specified to c_client.py, insert it in
the python path list just after the local dir entry,
rather than appending it to the existing paths.
This keeps a global/distro install of xcb from
overriding a local build of the xcb proto files.

Signed-off-by: James Jones <jajones@nvidia.com>
Signed-off-by: Jamey Sharp <jamey@minilop.net>
2011-05-11 23:49:39 -07:00
David Coles 294c9f455c Add support for building with Python 3
Python 3 introduces some language changes that cause issues when running
c_client.py. This also breaks compatibility with Python 2.5 since it does not
support the "as" statement in try/except blocks and does not have reduce() in
the functools package.

The main changes are:
* try/except blocks require `except ... as ...:` to resolve syntactical ambiguity
* map() and filter() return iterators rather than lists in Python 3
* reduce() is now in functools package (and not built-in in Python 3)
* Dictionaries don't have a has_key() method in Python 3
* None and int types can't be directly compared in Python 3
* print() is a statement in Python 3

See http://diveintopython3.org/porting-code-to-python-3-with-2to3.html and
PEP-3110 for details.

Verified on Python 2.6.5 and 3.1.3.

Signed-off-by: David Coles <dcoles@gaikai.com>
Signed-off-by: Julien Danjou <julien@danjou.info>
2011-05-04 15:00:21 +02:00
Jamey Sharp e300ee4920 Revert "Introduce xcb_wait_for_event_until, for consuming responses in 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 2415c11dec.

Conflicts:

	src/xcb.h
	src/xcb_in.c

Signed-off-by: Jamey Sharp <jamey@minilop.net>
2011-04-12 13:11:48 -07:00
Rami Ylimäki 527df3c84b Introduce a variant of xcb_poll_for_event for examining event queue.
In some circumstances using xcb_poll_for_event is suboptimal because
it checks the connection for new events. This may lead to a lot of
failed nonblocking read system calls.

Signed-off-by: Rami Ylimäki <rami.ylimaki@vincit.fi>
Signed-off-by: Jamey Sharp <jamey@minilop.net>
2011-04-12 13:05:59 -07:00
Alan Coopersmith b64cd0df88 If protocol is "unix", use a Unix domain socket, not TCP
Fixes fallback to local connections from Xlib's XOpenDisplay(), which
will try with protocol "unix" if a hostname is specified and tcp fails
(as it usually will now that most OS'es ship with -nolisten tcp enabled).

Also fixes explicitly specifying DISPLAY as "unix/foo:0", which Xlib
previously accepted for Unix domain sockets.

Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com>
2011-04-12 13:01:03 -07:00
Alan Coopersmith b027922ebf Make launchd code in xcb_util.c match surrounding code indent levels
Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com>
2011-04-12 13:01:03 -07:00
Carlos Garnacho 82b1f3919a Handle XGE events with the "send event" flag
This patch is necessary so xcb reads the payload after the message
for GenericEvents with the 0x80 flag turned on.

Signed-off-by: Carlos Garnacho <carlosg@gnome.org>
Signed-off-by: Jamey Sharp <jamey@minilop.net>
2011-04-12 12:57:37 -07:00
Alan Coopersmith 42c4adeff4 Add #include <sys/socket.h> to xcb_conn.c
Solves compiler warning on Solaris:
"xcb_conn.c", line 304: warning: implicit function declaration: shutdown

Also provides system definition of SHUT_RDWR on Solaris 11.

Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com>
Reviewed-by: Jamey Sharp <jamey@minilop.net>
2011-04-04 22:06:16 -07:00
Alan Coopersmith 4b502dd696 Remove unused DECnet code
"unifdef -UDNETCONN src/xcb_util.c" plus re-indenting code that was
formerly in the else clause after a DECnet check.

DECnet support has been removed from most of the X.Org code base for
several years, and it appears DNETCONN was never defined in XCB.

Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com>
Reviewed-by: Jamey Sharp <jamey@minilop.net>
2011-04-04 22:06:03 -07:00
Alan Coopersmith 7131d5d070 Use special path to sockets when running under Solaris Trusted Extensions
Solaris Trusted Extensions puts the endpoints for the X server's Unix
domain sockets in a special directory shared from the global zone to
each of the labeled zones, since each labeled zone has a separate /tmp.

Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com>
Reviewed-by: Peter Harris <pharris@opentext.com>
2011-04-04 19:56:16 -07:00
Rami Ylimäki 70976d87f1 Prevent theoretical double free and leak on get_peer_sock_name.
Variable new_sockname will leak and sockname will be double freed if
both of the cases shown below are true.

1. realloc succeeds and doesn't return the original pointer
2. calling socket_func fails

Signed-off-by: Rami Ylimäki <rami.ylimaki@vincit.fi>
Signed-off-by: Erkki Seppälä <erkki.seppala@vincit.fi>
Reviewed-by: Arnaud Fontaine <arnau@debian.org>
Signed-off-by: Peter Harris <pharris@opentext.com>
2011-03-24 11:30:21 -04:00
Jamey Sharp 3678159e4e Delete the old c-client.xsl.
It hasn't been used since libxcb 1.1.90.1, released in 2008.

Signed-off-by: Jamey Sharp <jamey@minilop.net>
2011-03-19 20:04:55 -07:00
Jamey Sharp 2415c11dec Introduce xcb_wait_for_event_until, for consuming responses in wire-order.
Signed-off-by: Jamey Sharp <jamey@minilop.net>
Reviewed-by: Josh Triplett <josh@freedesktop.org>
2011-03-18 21:59:47 -07:00
Jamey Sharp 29a974f212 Dequeue readers that can't receive any new responses.
Signed-off-by: Jamey Sharp <jamey@minilop.net>
Reviewed-by: Josh Triplett <josh@freedesktop.org>
2011-03-18 21:59:44 -07:00
Jamey Sharp 131e867fca Factor reader_list management out of wait_for_reply.
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-18 21:59:38 -07:00
Rami Ylimäki 6310475e23 Prevent reply waiters from being blocked.
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-14 17:19:14 -07:00
Jamey Sharp 2edfd5c375 Merge branch 'master' of git+ssh://git.freedesktop.org/git/xcb/libxcb
Apparently I forgot to push these months ago.
2011-03-13 09:33:44 -07:00
Peter Harris c2e0236462 Don't try to sizeof(void)
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-27 15:38:36 -05:00
Vincent Torri 9efced72a3 fix Windows build and installation 2011-01-20 20:46:04 -05:00
Peter Harris 3c58136971 Merge branch 'master' of git://anongit.freedesktop.org/~peterh/libxcb 2010-12-23 13:04:40 -05:00
Jeetu Golani 69b78ced1a Don't validate FD_SETSIZE on Win32
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-12-12 16:48:41 -05:00
Uli Schlachter 8ecd754b16 xcb_take_socket: Document sequence wrap requirements
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-27 12:48:27 +01:00
Nick Bowler 5755582444 xcb_auth: Fix memory leak in _xcb_get_auth_info.
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-11-23 14:58:48 +01:00
Jamey Sharp ed37b08751 xcb_in: Use 64-bit sequence numbers internally everywhere.
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-09 17:13:45 -07:00
Jamey Sharp 6c8b539c2a xcb_discard_reply: Simplify by re-using poll_for_reply helper.
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-09 13:19:05 -07:00
Jamey Sharp 3a74b5e7a1 xcb_request_check: Hold the I/O lock while deciding to sync.
Signed-off-by: Jamey Sharp <jamey@minilop.net>
2010-10-09 12:37:48 -07:00
Jamey Sharp ee1bc1d28a xcb_send_request: Send all requests using a common internal send_request.
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-10-09 12:37:23 -07:00
Peter Harris b672d1514c Fix _unserialize of reply headers
This cleans up a number of warnings, and passes the sequence number
through correctly.

Signed-off-by: Peter Harris <pharris@opentext.com>
2010-09-22 23:16:33 -04:00
Peter Harris 29cca33b90 Clean up a couple of warnings in xprint
Signed-off-by: Peter Harris <pharris@opentext.com>
2010-09-22 22:32:51 -04:00
Peter Harris 8c1d2021ca Make *_unserialize safe to use on buffers in-place
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-22 22:20:04 -04:00
Peter Harris 28a71c6567 Fix memory leak in _sizeof implemented with _unserialize
Signed-off-by: Peter Harris <pharris@opentext.com>
2010-09-22 22:20:04 -04:00
Peter Harris a22909c0f5 Don't emit out-of-module sizeof definitions
Signed-off-by: Peter Harris <pharris@opentext.com>
2010-09-22 22:20:04 -04:00
Josh Triplett 1c4717de36 Allow disconnecting connections that are in error state.
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-19 20:38:06 +02:00
Peter Harris 03bcccb132 Add xkb.* to gitignore
Signed-off-by: Peter Harris <pharris@opentext.com>
2010-09-10 15:54:56 -04:00
Peter Harris 28d3925800 Merge branch 'gsoc2010' of git://anongit.freedesktop.org/~chr/libxcb 2010-09-08 14:41:52 -04:00
Jamey Sharp f0565e8f06 _xcb_conn_wait: Shut down the connection on unexpected poll() events.
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-09-04 13:39:38 -04:00
Peter Harris 20da10490f Merge branch 'master' of git://github.com/topcat/xcb-win32
Conflicts:
	src/xcb_conn.c
	src/xcb_util.c

Signed-off-by: Peter Harris <pharris@opentext.com>
2010-08-31 18:35:20 -04:00
Aaron Plattner 7f5cfcc2fd xcb_disconnect: call shutdown() to force a disconnect
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-25 21:40:52 -04:00
Jamey Sharp 2040f10a4e xcb_request_check: Sync even if an event was read for this sequence.
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-24 09:29:59 -07:00
Christoph Reimann 5e8a7ade2d small fix to get rid of some compiler warnings
also added very basic documentation for xkb
2010-08-16 20:24:40 +02:00
Christoph Reimann 22e1013131 added accessors for special cases
major bugfixes include: rewrite of prefix related functions, merge of serialize/unserialize/... generators, extended field name resolution
2010-08-16 18:19:16 +02:00
Christoph Reimann fe0e32b5fa special case 'intermixed variable and fixed size fields': fixed reply side, needs testing 2010-08-08 21:25:13 +02:00
Christoph Reimann 77b594f958 renamed most _unserialize() functions to _sizeof() and fixed _unserialize() for the special case of intermixed variable and fixed size fields 2010-08-05 15:55:28 +02:00
Christoph Reimann b187f029d6 attempt to fix special case: variable fields followed by fixed size fields 2010-08-02 23:30:42 +02:00
Christoph Reimann a700eeb502 bug fixes for all kinds of 'special cases' 2010-08-01 23:40:20 +02:00
Christoph Reimann 1c590d5a86 partial rewrite of serialize helper functions completed;
_serialize() & _unserialize() have been tested for switch derived from valueparam
2010-07-22 16:41:15 +02:00
Christoph Reimann 566ae9baee preliminary handling of further special cases in unserialize
first attempts to unify serialize and unserialize
2010-07-20 22:46:37 +02:00
Christoph Reimann 4e665e1580 added generating code for _serialize() in case of variable sized structs (largely untested) 2010-07-15 18:43:43 +02:00
Christoph Reimann 86704124b1 new and still preliminary functions for switch; feautures include
- 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-13 20:06:08 +02:00
Christoph Reimann 80322d1163 xkb: updated configure.ac/Makefile.am 2010-07-13 19:59:23 +02:00
Christoph Reimann 8c2707773b added xcb_sumof() with restriction to uint8_t 2010-07-13 19:56:44 +02:00
Jamey Sharp 496efb7624 _xcb_conn_wait: Fix whitespace.
Signed-off-by: Jamey Sharp <jamey@minilop.net>
2010-07-13 07:10:50 -07:00
Pauli Nieminen de3cdad87a xcb_connect_to_display_with_auth_info: Fix memory leak
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 13:16:45 -04:00
Pauli Nieminen 18718d483e _xcb_parse_display: Fix error path
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-06-15 13:16:45 -04:00
Jeremy Huddleston 3f79628bec xcb_open: Improve protocol/host parsing
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-14 14:28:53 -07:00
Marcin Kościelnicki e4b746ac13 Add ~ operator support in code generator
Reviewed-by: Julien Cristau <jcristau@debian.org>
Signed-off-by: Julien Danjou <julien@danjou.info>
2010-05-14 13:19:28 +02:00
Arnaud Fontaine 5e86cb0566 Fix GCC error on undeclared variable when not using abstract socket
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-30 18:49:18 +01:00
Arnaud Fontaine a546d00091 Get rid of PATH_MAX and MAXPATHLEN
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-30 14:47:16 +02:00
Jeremy Huddleston d068572173 Use limits.h instead of syslimits.h
Regression found by tinderbox in 89b3485dad

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-23 21:57:26 -07:00
Jeremy Huddleston 89b3485dad Reworked launchd support to work better with _xcb_parse_display
Fixes: http://xquartz.macosforge.org/trac/ticket/390

Signed-off-by: Jeremy Huddleston <jeremyhu@apple.com>
2010-04-23 17:29:25 -07:00
Jeetu Golani 2dcf8b025b Replaced read() in read_block and _xcb_in_read() with recv for all
platforms. MSG_WAITALL is undefined in MinGW so it's been explicitly
defined in xcb_in.c
2010-04-23 00:47:16 +05:30
Jeetu Golani 56962e42a5 Set errno=0 in read_block. On Win32 there is no errno and this makes the
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.
2010-04-22 23:23:27 +05:30
Jamey Sharp b0525e2423 Always wake up readers after writing.
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-17 18:20:41 -07:00
Jamey Sharp eff3851ba8 Fix strict-aliasing warning when getting generic event length.
xcb_ge_event_t has its length field in the same place that
xcb_generic_reply_t does, so there's no need to cast the generic reply.

Signed-off-by: Jamey Sharp <jamey@minilop.net>
Cc: Peter Hutterer <peter.hutterer@who-t.net>
Reviewed-by: Julien Danjou <julien@danjou.info>
2010-04-17 18:20:41 -07:00
Jamey Sharp 6dd8228a13 Delete a useless level of indirection from _xcb_out_send's parameters.
_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>
2010-04-17 18:20:40 -07:00
Rémi Denis-Courmont a1d9aa6e07 Fail if fd is too big and poll() is not available
Depending on the process file limit, a file descriptor can be larger
than the capacity of fd_set. There is no portable way to create a
large enough fd_set at run-time. So we just fail if the file descriptor
number is too high and poll() is not available.

Reviewed-by: Jamey Sharp <jamey@minilop.net>
Signed-off-by: Julien Danjou <julien@danjou.info>
2010-04-08 12:05:00 +02:00
Jeetu Golani 0e0c80e749 xcb_in.c #ifndef _WIN32 inside of #if USE_POLL redundant and removed 2010-03-31 22:00:04 +05:30
Jeetu Golani e8009194c9 restablished inclusion of fcntl.h and netinet/tcp.h in xcb_util.c -- without these the code no longer compiled on *ix 2010-03-31 09:50:51 +05:30
Jeetu Golani d302f1e9b1 changes in xcb_windefs.h - the flag _XCB_WINDEFS_H replaces WINDEFS_H 2010-03-29 22:37:33 +05:30
Jeetu Golani 36c9a985aa windefs.h is now called xcb_windefs.h - changed all includes to reflect that.Replaced one instance ofWIN32 with _WIN32 in each xcb_in.c and xcb_conn.c 2010-03-29 22:31:49 +05:30
Jeetu Golani bce72f63d2 Win32 code for xcb-1.5 2010-03-26 09:40:09 +05:30
Samuel Thibault d18d03d6f3 Fix authentication on hpux and Hurd
libxcb's 010e5661 (Fix XDM-AUTHORIZATION-1 (bug #14202)) mistakenly
inverted a few lines of code, making local socket authentication fail on
hpux and Hurd: when getpeername fails, sockname needs to be initialized
by getsockname before its address family can be checked.

Signed-off-by: Samuel Thibault <samuel.thibault@ens-lyon.org>
Signed-off-by: Julien Danjou <julien@danjou.info>
2010-03-13 16:20:12 +01:00
Rémi Denis-Courmont 53a9834e4c Open the X11 socket with close-on-exec flag
This saves the X11 connection from leaking into children processes.
On Linux, this is fully thread-safe using SOCK_CLOEXEC. On other
systems, there is a small race condition.

Signed-off-by: Julien Danjou <julien@danjou.info>
2010-02-17 10:09:43 +01:00
Peter Harris 367882fa32 Support xcb_discard_reply
This function is useful for dynamic language garbage collectors. Frequently
a GC cycle may run before you want to block wainting for a reply.

This function is also marginally useful for libxcb apps that issue
speculative requests (eg. xlsclients).

Reviewed-by: Jamey Sharp <jamey@minilop.net>
Tested-by: Eamon Walsh <efw@eamonwalsh.com>
Signed-off-by: Peter Harris <pharris@opentext.com>
2010-02-11 14:35:37 -05:00
Rémi Denis-Courmont be7e528eae xcb_connect_to_fd: fix descriptor leak on memory error path
Signed-off-by: Julien Danjou <julien@danjou.info>
2010-01-07 18:03:30 +01:00
Julien Danjou 6e875a82a8 build: simplify extension building
Signed-off-by: Julien Danjou <julien@danjou.info>
2009-12-03 11:34:18 +01:00
Adam Jackson 1cf2a87def setsockopt(SO_KEEPALIVE) on TCP display connections.
This matches xtrans behaviour in SocketINETConnect, and makes it so apps
don't hang forever if their display dies.

Signed-off-by: Adam Jackson <ajax@redhat.com>
2009-12-02 14:31:56 -05:00
Eric Anholt e82c34c2f7 Add DRI2 support. (v2)
v2: Build fix from jcristau.
2009-10-19 09:47:06 -07:00
Yaakov Selkowitz ff2e2e35bc Cygwin build fix: Add -no-undefined to libtool flags
-no-undefined is needed to tell libtool a shared library can be built
on platforms which require all references to be statisfied at link time.

Signed-off-by: Jon TURNEY <jon.turney@dronecode.org.uk>
Signed-off-by: Julien Danjou <julien@danjou.info>
2009-08-31 17:48:32 +02:00
Arnaud Fontaine f4c2794bf5 Add majorCode, minorCode and resourceID fields to X generic error 2009-07-15 16:03:56 +01:00
Jamey Sharp e06955ed66 Fix precedence bug: wrong length for big-requests preceded by sync.
Also replace excessively clever use of bitwise OR with equivalent
addition.

Reported-by: Geoffrey Li <geoffrey@seitopos.com>
Signed-off-by: Jamey Sharp <jamey@minilop.net>
Signed-off-by: Josh Triplett <josh@joshtriplett.org>
2009-07-06 13:14:35 -07:00
Julien Cristau 9e191c722a Fix libxcb-randr version info
The SONAME shouldn't have been bumped in 1.3, only new symbols were
added.

Signed-off-by: Julien Danjou <julien@danjou.info>
2009-05-29 17:05:11 +02:00
elupus ee89850e68 Disable Nagle on TCP socket
Signed-off-by: Julien Danjou <julien@danjou.info>
2009-05-26 16:14:48 +02:00
Julien Danjou efbe96ee0a depends on recent xcb-proto and bump version of randr
Signed-off-by: Julien Danjou <julien@danjou.info>
2009-05-09 17:39:34 +02:00
Bart Massey 010e566126 Fix XDM-AUTHORIZATION-1 (bug #14202)
With this patch, we know use correctly the socket address or peer
address for authentication purpose.

Signed-off-by: Julien Danjou <julien@danjou.info>
2009-04-21 08:41:34 +02:00
Julien Danjou ca978a9dae util: remove useless strlen calls from decnet opening
Signed-off-by: Julien Danjou <julien@danjou.info>
2009-04-10 09:59:49 +02:00
Julien Danjou cc19143141 util: merge common code for xcb_connect
Many code was duplicated between xcb_connect_to_display_with_auth_info
and xcb_connect(). We merge both, since the difference is just about the
xcb_auth_info_t pointer being supplied, or not.

Signed-off-by: Julien Danjou <julien@danjou.info>
2009-04-10 09:59:49 +02:00
Julien Danjou 8797e053b2 util: open_abstract gets filelen as parameters
That saves us from a couple of strlen() calls.

Signed-off-by: Julien Danjou <julien@danjou.info>
2009-04-10 09:59:49 +02:00
Julien Danjou f0b2981974 auth: use snprintf() return value
That save us from a strlen().

Signed-off-by: Julien Danjou <julien@danjou.info>
2009-04-10 09:59:49 +02:00
Julien Danjou 9f24c91f91 auth: precompute authnameslen
Signed-off-by: Julien Danjou <julien@danjou.info>
2009-04-10 09:59:49 +02:00
Samuel Thibault 6e2e87d0bb Local socket connections do not work on hurd-i386
Local socket connections currently do not work on hurd-i386 because
xcb_auth calls getpeername() on the client socket, but hurd-i386 does
not implement anything in that case (I actually wonder what reasonable
value could be returned).  In such case the xcb code does not actually
need the peer name anyway.

Signed-off-by: Julien Danjou <julien@danjou.info>
2009-04-06 16:53:11 +02:00
Michael Ost f916062edf use poll() instead of select() when available
Signed-off-by: Julien Danjou <julien@danjou.info>
2009-03-30 11:09:32 +02:00
Bart Massey beccb0be15 kludgily hand-merged xid fixes
Signed-off-by: Bart Massey <bart@cs.pdx.edu>
Signed-off-by: Julien Danjou <julien@danjou.info>
2009-03-28 14:59:01 +01:00
Julien Danjou 1e9c0f1012 Fix do_append() arguments
Signed-off-by: Julien Danjou <julien@danjou.info>
2009-03-16 10:26:37 +01:00
Julien Danjou fcb433db80 Copy full IPv4 mapping (Bug #20665)
Signed-off-by: Julien Danjou <julien@danjou.info>
2009-03-15 19:57:56 +01:00
Peter Harris eaa71eac02 Avoid name collisions between xidtype and enum.
These changes are necessary to build with latest xcb/proto.

Signed-off-by: Peter Harris <pharris@opentext.com>
2009-03-14 12:34:31 -04:00
Peter Harris e986d1ee5a Revert "Don't use enums in generated C code"
This commit broke xcb/util.

This reverts commit 9984b72888.

Signed-off-by: Peter Harris <pharris@opentext.com>
2009-03-13 15:25:30 -04:00
Peter Harris 9984b72888 Don't use enums in generated C code - use integer constants instead.
Signed-off-by: Peter Harris <pharris@opentext.com>
2009-02-25 19:07:23 -05:00
Julien Danjou 2e65188f91 Stop providing autogenerated files in tarball
Signed-off-by: Julien Danjou <julien@danjou.info>
2009-02-16 11:44:20 +01:00
Jeremy Huddleston f896ae8c53 Shutup compiler warning about unused variable... 2008-11-23 17:25:21 -08:00
Jeremy Huddleston d79621b25b Apple: Apple launchd cleanup
Added --with-launchd option instead of just using __APPLE__
Fixed opening launchd fd when displayname=NULL
2008-11-23 17:23:17 -08:00
Jeremy Huddleston 9b79ae49f7 Apple: Enable support for launchd DISPLAY socket 2008-11-23 16:18:25 -08:00
Peter Harris 43b612a5e9 Treat XIDs the same as other cardinal values.
This fixes a bug where c_client.py wasn't generating *_end functions,
but expected them to exist in order to find the subsequent list's start.

Signed-off-by: Peter Harris <peter.harris@hummingbird.com>
2008-11-19 11:06:01 -05:00
Josh Triplett fa452cc9b2 Support handing off socket write permission to external code.
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-29 15:40:41 -07:00
Jamey Sharp baff35a04b Track 64-bit sequence numbers internally.
External APIs that used 32-bit sequence numbers continue to do so.

Commit by Josh Triplett and Jamey Sharp.
2008-10-29 15:40:41 -07:00
Jamey Sharp 96e55444b9 Use sequence number ranges in pending replies
This allows optimizing adjacent pending replies with the same flags, and
will help support default flags for a range of future requests.

Commit by Josh Triplett and Jamey Sharp.
2008-10-29 15:40:41 -07:00
Jamey Sharp 059ca642c7 Inline _xcb_lock_io, _xcb_unlock_io, and _xcb_wait_io.
These functions are once again a single pthread call, so just make that
call directly.
2008-10-29 15:40:41 -07:00
Jamey Sharp d989656cde Remove libxcb-xlib and xcbxlib.h. 2008-10-29 15:40:04 -07:00
Julien Danjou cebd482a20 allow compile-time setting for XCB queue buffer size
Signed-off-by: Julien Danjou <julien@danjou.info>
2008-10-14 20:38:47 +02:00
Henning Sten db332dcda9 fix tiny memory leak in read_packet (leak only happens when malloc returns NULL so it's very rare)
Signed-off-by: Julien Danjou <julien@danjou.info>
2008-09-20 14:21:17 +02:00
Carsten Meier 9afadd2aef Added generation of extern "C" for compatibility with C++
The auto-generated header files now include an extern "C"
declaration for compatibility with C++.

Signed-off-by: Julien Danjou <julien@danjou.info>
2008-09-09 15:00:38 +02:00
Julien Cristau 25e59ccc0d Add support for the abstract socket namespace under Linux
Based on same in Xtrans.

Signed-off-by: Julien Danjou <julien@danjou.info>
2008-09-09 14:44:54 +02:00
Julien Cristau f3f8738436 Fix some fd leaks in _xcb_open_*()
Signed-off-by: Julien Danjou <julien@danjou.info>
2008-09-09 14:44:54 +02:00
Bart Massey d6d44e1bf0 fixed overly aggressive warning about fixed field following variable 2008-09-03 13:52:58 -07:00
Bart Massey 7e0674e761 added small fix to support trailing fixed fields; also warning for non-pad fixed fields 2008-09-03 11:58:14 -07:00
Vincent Torri 2d04a1e6ce factorize m4 macros and add one to set X extensions
Signed-off-by: Julien Danjou <julien@danjou.info>
2008-08-31 10:33:31 +02:00
Julien Danjou bcf662c1b4 Initialize all fields of addrinfo
Signed-off-by: Julien Danjou <julien@danjou.info>
2008-08-28 14:35:54 +02:00
Julien Danjou baf31b1bf2 Use ifdef instead of if for defined value
Signed-off-by: Julien Danjou <julien@danjou.info>
2008-08-28 13:51:38 +02:00
Julien Danjou 38d5de3a55 Set namelen unsigned
Signed-off-by: Julien Danjou <julien@danjou.info>
2008-08-28 13:49:21 +02:00
Julien Danjou 9c9c09b376 Rename index to idx to avoid shadowing
Signed-off-by: Julien Danjou <julien@danjou.info>
2008-08-28 13:49:21 +02:00
Julien Danjou c5b2e53abf Use a signed size in read_block()
Signed-off-by: Julien Danjou <julien@danjou.info>
2008-08-28 13:49:21 +02:00
Julien Danjou 1bbdba5211 Use unsigned to compare and rename sync
- i must be unsigned to be compare in the loop
- sync shadow global sync() function

Signed-off-by: Julien Danjou <julien@danjou.info>
2008-08-28 13:49:21 +02:00
Julien Danjou 6438584285 Fix htonl() arg & convert sizeof() to signed
Signed-off-by: Julien Danjou <julien@danjou.info>
2008-08-28 13:49:21 +02:00
Julien Danjou 1ead02e88e initialize global_id to 0
Signed-off-by: Julien Danjou <julien@danjou.info>
2008-08-28 13:49:21 +02:00
Julien Cristau cdc3479387 Make EXTHEADERS, EXTSOURCES, EXTENSION_XML unconditional of configure flags.
yay, make distcheck works now even when some extensions are disabled.

Acked-by: Peter Hutterer <peter.hutterer@who-t.net>
2008-07-16 23:25:04 +09:30
Petr Salinger a9d15a0845 fix FreeBSD support
The GNU/kFreeBSD (and BSDs in general) have a different
layout of struct sockaddr, sockaddr_in, sockaddr_un ...

The first member do not have to be "sa_family",
they also have "sa_len" field.

Signed-off-by: Julien Danjou <julien@danjou.info>
2008-07-07 17:57:37 +02:00
Josh Triplett 424ad131b7 Fix variable declaration formatting 2008-05-28 12:26:13 -07:00
Peter Hutterer 6532c715c3 Add xcb_ge_event_t and handling for long events.
GenericEvent can be more than 32 bytes long. Ensure that the required data is
pulled off the wire and tack it onto the event.

Due to the structure of the xcb_generic_event_t, the data is appended AFTER
the full_sequence field.
2008-05-21 21:22:13 +09:30
Oswald Buddenhagen b08a5909da Fix libxcb/src compile with srcdir != builddir. 2008-05-01 16:17:55 -04:00
Eamon Walsh 4a405feba8 Replace a stray c-client.xsl in the libxcb SOURCES. Fixes make distcheck. 2008-04-23 20:28:13 -04:00
Eamon Walsh 40566c36d5 Use the python install path from xcb-xproto.pc to locate the xcbgen package. 2008-04-23 20:25:57 -04:00
Jeremy Kolb b3832bcc46 Add mention of PYTHONPATH if xcbgen cannot be found. 2008-04-20 16:26:51 -04:00
Eamon Walsh 5ee915e12a Add Python parser C language-dependent part. 2008-04-19 04:44:29 -04:00
Eamon Walsh 947a2e26e4 Add SELinux extension support, disabled by default. 2008-01-24 16:02:34 -05:00
Eamon Walsh 0b5f684eb0 Add XInput extension support, disabled by default. 2008-01-24 15:57:35 -05:00
Eamon Walsh 7a74ba3d02 Generated the configure.ac and Makefile.am's in libxcb with the idea of
making each extension library individually selectable for build.

Signed-off-by: Eamon Walsh <ewalsh@tycho.nsa.gov>
2007-12-07 16:22:04 -05:00
Bart Massey 9bf8329b50 make IPv6 optional 2007-11-24 14:53:54 -08:00
Eamon Walsh 46413cd85e Add comment noting the requirement to free replies when finished. 2007-11-16 19:34:42 -05:00
Jamey Sharp af50de26c1 Revert "Generate error constants as XCB_BAD_*, similar to Xlib."
Since several extensions named their errors like "BadFoo", this patch
results in names like XCB_EXT_BAD_BAD_FOO, which is really awful. Those
extensions are already kind of awful, as they produce structure names
like xcb_ext_bad_foo_error_t, which is redundant.

A patch that removes "Bad" from the XML extension descriptions, while
maintaining API and ABI compatibility in XCB, is needed before this
patch can be released.

This reverts commit 158c9b6ba1.
2007-11-04 17:26:21 -08:00
Jamey Sharp a29fbc2645 Don't hold the xlib-xcb lock while sleeping: that allows deadlock.
With this patch, `ico -threads 2` runs without deadlock.

Many thanks to Christoph Pfister <christophpfister@gmail.com> for
pointing out the problem, providing detailed analyses, explaining it to
me repeatedly until I understood what was going on, and proposing and
reviewing possible solutions.

Signed-off-by: Jamey Sharp <jamey@minilop.net>
Acked-by: Christoph Pfister <christophpfister@gmail.com>
2007-10-28 13:28:18 -07:00
Jamey Sharp f6b75d6090 Factor pthread_cond_wait(iolock) to _xcb_wait_io.
This parallels the _xcb_lock_io and _xcb_unlock_io factoring.
2007-10-28 11:56:08 -07:00
Jamey Sharp 4d828c5eba Don't abort() on locking assertions if LIBXCB_ALLOW_SLOPPY_LOCK is set.
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>
2007-10-23 11:44:20 -07:00
Egbert Eich 09045eaac3 Allow unix:<screen> style display names again.
https://bugzilla.novell.com/show_bug.cgi?id=289007
This notion is used in a lot of scripts.
2007-07-19 17:00:18 +02:00
Josh Triplett 65ffbc6cfd Send locking assertion backtraces to stderr. Improve the heading on the backtrace. 2007-06-13 23:46:37 -07:00
Christoph Pfister 605c778e69 Print backtraces in case an assert fails inside xlib/xcb.
As you know there are some nasty libs / apps doing locking
incorrectly. In order to improve the information given to the user
when he encounters such a situation (people don't run apps in gdb
normally) I created the patch attached.
It's very non-intrusive (and affects only xlib/xcb, Josh told me on
irc that it could be useful for other areas too, personally I don't
think that it's really needed at other places ...).

Some same outputs and the discussion of them:

    lxuser@pdln:/tmp$ ./main
    Got a backtrace:
    #0 /tmp/usr/lib/libxcb-xlib.so.0 [0xb7f9d728]
    #1 /tmp/usr/lib/libxcb-xlib.so.0(xcb_xlib_unlock+0x31) [0xb7f9d861]
    #2 ./test.so(function_a+0x11) [0xb7f9f3fd]
    #3 ./test.so(function_b+0x11) [0xb7f9f410]
    #4 ./main [0x80484a7]
    #5 /lib/libc.so.6(__libc_start_main+0xdc) [0xb7e60ebc]
    #6 ./main [0x80483f1]
    main: xcb_xlib.c:82: xcb_xlib_unlock: Assertion `c->xlib.lock' failed.
    Aborted

That's kinda the normal situation.

    lxuser@pdln:/tmp$ ./main
    Got a backtrace:
    #0 /tmp/usr/lib/libxcb-xlib.so.0 [0xb7f90728]
    #1 /tmp/usr/lib/libxcb-xlib.so.0(xcb_xlib_unlock+0x31) [0xb7f90861]
    #2 /tmp/test.so [0xb7f923cd]
    #3 /tmp/test.so(function_b+0x11) [0xb7f923e0]
    #4 ./main [0x80484ab]
    #5 /lib/libc.so.6(__libc_start_main+0xdc) [0xb7e53ebc]
    #6 ./main [0x80483f1]
    main: xcb_xlib.c:82: xcb_xlib_unlock: Assertion `c->xlib.lock' failed.
    Aborted

There are two possible reasons that the name doesn't appear in #2:
a) a hidden symbol or a symbol with statical linkage in a library
b) a symbol in an app not compiled with -rdynamic.
But in both cases you still know _where_ the caller is.

Note that in this example test.so was compiled with
-fomit-frame-pointer; this isn't an issue as _one_ (= the caller)
stack trace is still valid (as long as you don't have the insane idea
to compile xcb with -fo-f-p).

Another issue that may appear is "tail call elimination" (some entries
are mysteriously missing; this is quite ugly, but you still get enough
information so that you can do something useful with the issue e.g. by
disassembling the relevant parts with gdb).

Signed-off-by: Jamey Sharp <jamey@minilop.net>
2007-06-06 15:54:11 -07:00
Jamey Sharp e20a31d72b xcb_poll_for_event: Return already-read events before read(2)ing again. 2007-06-02 18:29:37 -07:00
Ian Osgood 158c9b6ba1 Generate error constants as XCB_BAD_*, similar to Xlib.
The previous constants remain for compatibility, but should be deprecated.
2007-04-13 15:14:12 -07:00
Eamon Walsh eaa380efef Modify new attribute from previous patch so that it is necessary only on
extensions with split names.  Tested with diff and found no difference with
previous stylesheet header-file output.
2007-04-10 11:56:06 -04:00
Eamon Walsh 91be36f845 Replaces special-casing in c-client stylesheet with support
for new attribute.  Tested with diff and found no difference with
previous stylesheet header-file output.
2007-03-29 12:28:07 -07:00
TORRI Vincent 4a60950b74 add the first step toward the documentation of the request/reply functions. The arguments of the requests are not found yet. Josh, can you look at it ? 2007-02-27 13:35:02 +01:00
TORRI Vincent ab22a4d616 add doxygen doc for the *_end functions 2007-01-22 11:40:15 +01:00
TORRI Vincent 67af2d24e4 add doc tag for the _next functions. It creates doxygen doc in the header files for these functions 2006-11-28 20:26:54 +01:00
Jamey Sharp 3360d0c79e NetBSD doesn't have AI_ADDRCONFIG: use it only if it's available. 2006-11-24 13:24:05 -08:00
Diego 'Flameeyes' Pettenò 11738b2af0 Avoid race condition when using multiple make jobs
Avoid race condition when symlinking XML files.
When declaring a rule with many files as target, the rule is called
when any of them is requested, resulting in multiple for loops happening
during a make process using more than one job.
Also, use '$(LN_S) -f' rather than removing and recreating a file,
that one should be as supported as 'rm -f' and requires one less command.
2006-11-23 07:32:18 -08:00
Josh Triplett 608058ec80 Remove --with-opt and --with-debug options from configure.ac; use CFLAGS instead
configure supports using custom CFLAGS, so remove the --with-opt and
--with-debug options from configure.ac, and the corresponding usage of
COPTFLAGS and CDEBUGFLAGS in src/Makefile.am.
2006-11-22 22:47:15 -08:00
Jamey Sharp 183c2ba4cc xcb-proto has no libraries or headers, so don't use XCBPROTO_CFLAGS or XCBPROTO_LIBS. 2006-11-22 21:27:41 -08:00
Jamey Sharp e54dfd73a9 Use pthread-stubs as needed, and list xdmcp in Requires.private when XCB is built to use it. 2006-11-22 20:29:04 -08:00
Josh Triplett 3de6ab7b78 Replace uses of "long" with uint32_t, and similar; fixes 64-bit bugs 2006-11-21 20:29:34 -08:00
Ian Osgood 7fbfebaa3f Fix IP6 work for FreeBSD/Mac. 2006-11-21 09:04:37 -08:00
Josh Triplett 684b8271a4 Support XDM-AUTHORIZATION-1 on IPv6
Commit by Jamey Sharp and Josh Triplett.
2006-11-21 00:57:49 -08:00
Josh Triplett d6abe93b06 Refactor auth code to get display number from xcb_connect
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-20 23:28:03 -08:00