Commit Graph

740 Commits

Author SHA1 Message Date
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
Matthias Hopf 2ec1383a68 Merge branch 'master' of git://anongit.freedesktop.org/git/xcb/libxcb 2007-04-18 12:46:08 +02: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
TORRI Vincent f7279d8c8a Merge branch 'master' of git+ssh://git.freedesktop.org/git/xcb/libxcb 2007-04-12 15:48:44 +02:00
TORRI Vincent 0925e470b2 remove the 7th bit of the response_type for the event loops 2007-04-12 15:46:05 +02:00
Matthias Hopf 3abd41625c Update autogen.sh to one that does objdir != srcdir 2007-04-11 17:31:31 +02: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 bca41cdcdb and make the html code valid... 2007-02-07 20:08:27 +01:00
TORRI Vincent acefe83bea font part 2007-02-07 20:04:10 +01:00
TORRI Vincent 8a8c1fa184 no more xid or id fields 2007-02-07 18:57:46 +01:00
TORRI Vincent 6cedaece0e add the complete cursor example. Make the html code valid 2007-02-06 09:31:54 +01:00
TORRI Vincent ab22a4d616 add doxygen doc for the *_end functions 2007-01-22 11:40:15 +01:00
TORRI Vincent 342e9cefcc fix all the occurence where a drawable where considered as a union 2007-01-13 11:20:55 +01:00
Josh Triplett 70a72f65e4 Add autogen.sh to EXTRA_DIST. 2006-12-10 21:10:06 -08:00
Josh Triplett 867ae5eb5c Add tools/* to EXTRA_DIST. 2006-12-10 21:09:30 -08: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
TORRI Vincent 4c8777f87a Merge branch 'master' of git+ssh://git.freedesktop.org/git/xcb/libxcb 2006-11-28 20:15:27 +01:00
TORRI Vincent e624cca7df add some output informations to configure script 2006-11-28 20:14:16 +01:00
Tilman Sauerbeck f486075fa0 If enable_build_docs is "no", we don't even try to look for doxygen.
Also set BUILD_DOCS in that branch. Now the disable-build-docs works
as expected.
2006-11-27 21:46:45 -08:00
Tilman Sauerbeck 2e8e6debac Fixed evaluation of the disable-build-docs argument.
Now at least enable_build_docs is set correctly.
2006-11-27 21:46:45 -08:00
Ian Osgood 19dfaf93ac Fix unit tests for FreeBSD
putenv() string must contain '='
environment failure test is invalid if argument is NULL
2006-11-26 09:27:37 -08:00
Josh Triplett 98e2a5617e Use substitition variables in xcb-xinerama.pc.in, not instances of their values
xcb-xinerama.pc.in looked more like a generated .pc file; replace specific
instances of values provided by an invocation of configure with the general
substitution variables configure replaces.
2006-11-25 22:27:33 -08:00
Ian Osgood e74cdcd02e Bug #9119: test xcb_popcount 2006-11-25 11:00:14 -08:00
Jamey Sharp 05d23a724d libXau didn't have a correct pkg-config file until 0.99.2: fail if an older version is found. 2006-11-24 16:22:13 -08: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
TORRI Vincent 818811a7ac replace all the _new functions with xcb_generate_id. repalce X11/XCB with xcb. Fix a description of the default background of a window 2006-11-24 12:33:15 +01:00
Josh Triplett 27f98afc2f Release libxcb 1.0 2006-11-23 12:45:11 -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 30c768b322 Rewrite automake's data installation rules, because they suck.
Specifically, they didn't handle installing data from both srcdir and builddir.
We have the tutorial in the srcdir, and build the manual in the builddir.

Also, stop rebuilding the manual for each make target in the doc directory, and
every time any of those targets get called.  This change now makes the manual
never rebuild once built; we plan to fix that later, by rewriting the makefiles
to avoid recursive make, and then making the manual depend on the source files.

Commit by Jamey Sharp and Josh Triplett.
2006-11-23 02:11:56 -08:00
Josh Triplett af3a15838f Rework doxygen build and install to work with srcdir != builddir
The documentation generation with doxygen now works when built out of tree,
with srcdir != builddir.  xcb.doxygen now gets generated from xcb.doxygen.in,
so that it can use top_builddir and top_srcdir to find source and to output
documentation.  Also fill in PROJECT_NUMBER from @VERSION@, now that we have
it readily available via autoconf.
2006-11-23 00:11:09 -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
Josh Triplett 1aade6a15f Check for getaddrinfo rather than gethostbyname in configure.ac
Since the addition of IPv6 support, we now use getaddrinfo rather than
gethostbyname; update configure.ac accordingly.
2006-11-22 21:49:52 -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
Josh Triplett 4a928de402 Only use AI_NUMERICSERV if defined. 2006-11-20 22:26:40 -08:00
Josh Triplett 907f8c8c49 Support authentication for IPv6 connections
Support AF_INET6 in get_authptr, and refactor to use common code for IPv4 and
v4-mapped IPv6 addresses.

Commit by Jamey Sharp and Josh Triplett.
2006-11-20 22:16:24 -08:00
Josh Triplett 48776ce233 Support displays with IPv6 addresses or hosts which resolve to IPv6 addresses
xcb_parse_display already correctly handled IPv6 displays.  Now, _xcb_open_tcp
uses getaddrinfo, and correctly connects to IPv6 displays.  Displays can use
bare IPv6 addresses, square-bracketed IPv6 addresses, or hostnames which
resolve to IPv6 addresses.

Since IPv6 addresses may include colons, including at the end, revise the
DECnet display parsing code to avoid triggering on IPv6 addresses.

Authorization may not work with IPv6 connections yet.

This commit brought to you by the (display) number ::1:1.1, the letter X,
the Gobby collaborative editor, Josh Triplett, and Jamey Sharp.
2006-11-20 17:54:34 -08:00
Josh Triplett 6c3a8db3f6 Add new xcb_parse_display test cases, most related to IPv6 addresses 2006-11-20 17:48:49 -08:00
Jamey Sharp 3d9bb02012 Bug #5958: Also zero out the implicit pad byte in empty requests. 2006-11-19 23:59:25 -08:00