diff options
author | Jamey Sharp <jamey@minilop.net> | 2007-10-23 11:03:33 -0700 |
---|---|---|
committer | Jamey Sharp <jamey@minilop.net> | 2007-10-23 11:44:20 -0700 |
commit | 4d828c5eba9fc7161c5f18650f2dbe218e1db06f (patch) | |
tree | 5b171f1c6d59930e77fa91bb05608104d6ae9d85 /src/xcb_conn.c | |
parent | 09045eaac34973662aaa820a94ca8ed66d9dcb4e (diff) |
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>
Diffstat (limited to 'src/xcb_conn.c')
-rw-r--r-- | src/xcb_conn.c | 3 |
1 files changed, 3 insertions, 0 deletions
diff --git a/src/xcb_conn.c b/src/xcb_conn.c index 3b315bc..827a12b 100644 --- a/src/xcb_conn.c +++ b/src/xcb_conn.c @@ -62,6 +62,9 @@ static int set_fd_flags(const int fd) static int _xcb_xlib_init(_xcb_xlib *xlib) { xlib->lock = 0; +#ifndef NDEBUG + xlib->sloppy_lock = (getenv("LIBXCB_ALLOW_SLOPPY_LOCK") != 0); +#endif pthread_cond_init(&xlib->cond, 0); return 1; } |