diff --git a/dist/libxcb/ChangeLog b/dist/libxcb/ChangeLog index 2a2896502..2581a818a 100644 --- a/dist/libxcb/ChangeLog +++ b/dist/libxcb/ChangeLog @@ -1,3 +1,53 @@ +commit 8287ebd7b752c33b0cabc4982606fe4831106f7e +Author: Uli Schlachter +Date: Thu Sep 27 14:04:17 2018 +0200 + + Release libxcb 1.13.1 + +commit bbda345a718ff73086437e51f03fcbb73e4365b9 +Author: Erik Kurzinger +Date: Mon Aug 20 12:06:25 2018 -0700 + + don't flag extra reply in xcb_take_socket + + If any flags are specified in a call to xcb_take_socket, + they should only be applied to replies for requests sent + after that function returns (and until the socket is + re-acquired by XCB). + + Previously, they would also be incorrectly applied to the + reply for the last request sent before the socket was taken. + For instance, in this example program the reply for the + GetInputFocus request gets discarded, even though it was + sent before the socket was taken. This results in the + call to retrieve the reply hanging indefinitely. + + static void return_socket(void *closure) {} + + int main(void) + { + Display *dpy = XOpenDisplay(NULL); + xcb_connection_t *c = XGetXCBConnection(dpy); + + xcb_get_input_focus_cookie_t cookie = xcb_get_input_focus_unchecked(c); + xcb_flush(c); + + uint64_t seq; + xcb_take_socket(c, return_socket, dpy, XCB_REQUEST_DISCARD_REPLY, &seq); + + xcb_generic_error_t *err; + xcb_get_input_focus_reply(c, cookie, &err); + } + + In practice, this has been causing intermittent KWin crashes when + used in combination with the proprietary NVIDIA driver such as + https://bugs.kde.org/show_bug.cgi?id=386370 since when Xlib fails to + retrieve one of these incorrectly discarded replies it triggers + an IO error. + + Signed-off-by: Erik Kurzinger + Signed-off-by: Uli Schlachter + commit 7e0f166579672d71efd819c81f0c932b0acd542c Author: Daniel Stone Date: Wed Feb 28 01:26:55 2018 +0000 diff --git a/dist/libxcb/NEWS b/dist/libxcb/NEWS index c792b0559..b2ab096a6 100644 --- a/dist/libxcb/NEWS +++ b/dist/libxcb/NEWS @@ -1,3 +1,7 @@ +Release 1.13.1 (2018-09-27) +=========================== +* Don't flag extra reply in xcb_take_socket + Release 1.13 (2018-02-28) ========================= * Add support for variable-sized lists of FDs diff --git a/dist/libxcb/build-aux/compile b/dist/libxcb/build-aux/compile index 2ab71e4ea..99e50524b 100644 --- a/dist/libxcb/build-aux/compile +++ b/dist/libxcb/build-aux/compile @@ -1,9 +1,9 @@ #! /bin/sh # Wrapper for compilers which do not understand '-c -o'. -scriptversion=2016-01-11.22; # UTC +scriptversion=2018-03-07.03; # UTC -# Copyright (C) 1999-2017 Free Software Foundation, Inc. +# Copyright (C) 1999-2018 Free Software Foundation, Inc. # Written by Tom Tromey . # # This program is free software; you can redistribute it and/or modify @@ -17,7 +17,7 @@ scriptversion=2016-01-11.22; # UTC # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License -# along with this program. If not, see . +# along with this program. If not, see . # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a @@ -340,7 +340,7 @@ exit $ret # Local Variables: # mode: shell-script # sh-indentation: 2 -# eval: (add-hook 'write-file-hooks 'time-stamp) +# eval: (add-hook 'before-save-hook 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC0" diff --git a/dist/libxcb/build-aux/test-driver b/dist/libxcb/build-aux/test-driver index 0218a01f6..b8521a482 100644 --- a/dist/libxcb/build-aux/test-driver +++ b/dist/libxcb/build-aux/test-driver @@ -1,9 +1,9 @@ #! /bin/sh # test-driver - basic testsuite driver script. -scriptversion=2016-01-11.22; # UTC +scriptversion=2018-03-07.03; # UTC -# Copyright (C) 2011-2017 Free Software Foundation, Inc. +# Copyright (C) 2011-2018 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -16,7 +16,7 @@ scriptversion=2016-01-11.22; # UTC # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License -# along with this program. If not, see . +# along with this program. If not, see . # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a @@ -140,7 +140,7 @@ echo ":copy-in-global-log: $gcopy" >> $trs_file # Local Variables: # mode: shell-script # sh-indentation: 2 -# eval: (add-hook 'write-file-hooks 'time-stamp) +# eval: (add-hook 'before-save-hook 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC0" diff --git a/dist/libxcb/configure.ac b/dist/libxcb/configure.ac index f880918bc..8a05bf1aa 100644 --- a/dist/libxcb/configure.ac +++ b/dist/libxcb/configure.ac @@ -2,7 +2,7 @@ dnl Process this file with autoconf to produce a configure script. # Initialize Autoconf AC_PREREQ([2.60]) -AC_INIT([libxcb],[1.13], +AC_INIT([libxcb],[1.13.1], [https://bugs.freedesktop.org/enter_bug.cgi?product=xcb], [libxcb]) AC_CONFIG_AUX_DIR([build-aux]) diff --git a/dist/libxcb/m4/libtool.m4 b/dist/libxcb/m4/libtool.m4 index a644432f4..e67ed6997 100644 --- a/dist/libxcb/m4/libtool.m4 +++ b/dist/libxcb/m4/libtool.m4 @@ -728,7 +728,6 @@ _LT_CONFIG_SAVE_COMMANDS([ cat <<_LT_EOF >> "$cfgfile" #! $SHELL # Generated automatically by $as_me ($PACKAGE) $VERSION -# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: # NOTE: Changes made to this file will be lost: look at ltmain.sh. # Provide generalized library-building support services. @@ -2867,9 +2866,6 @@ linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) # before this can be enabled. hardcode_into_libs=yes - # Add ABI-specific directories to the system library path. - sys_lib_dlsearch_path_spec="/lib64 /usr/lib64 /lib /usr/lib" - # Ideally, we could use ldconfig to report *all* directores which are # searched for libraries, however this is still not possible. Aside from not # being certain /sbin/ldconfig is available, command @@ -2878,7 +2874,7 @@ linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) # appending ld.so.conf contents (and includes) to the search path. if test -f /etc/ld.so.conf; then lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \[$]2)); skip = 1; } { if (!skip) print \[$]0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '` - sys_lib_dlsearch_path_spec="$sys_lib_dlsearch_path_spec $lt_ld_extra" + sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" fi # We used to test for /lib/ld.so.1 and disable shared libraries on @@ -2890,6 +2886,18 @@ linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) dynamic_linker='GNU/Linux ld.so' ;; +netbsdelf*-gnu) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + dynamic_linker='NetBSD ld.elf_so' + ;; + netbsd*) version_type=sunos need_lib_prefix=no @@ -3549,7 +3557,7 @@ linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) lt_cv_deplibs_check_method=pass_all ;; -netbsd*) +netbsd* | netbsdelf*-gnu) if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$' else @@ -4427,7 +4435,7 @@ m4_if([$1], [CXX], [ ;; esac ;; - netbsd*) + netbsd* | netbsdelf*-gnu) ;; *qnx* | *nto*) # QNX uses GNU C++, but need to define -shared option too, otherwise @@ -4939,6 +4947,9 @@ m4_if([$1], [CXX], [ ;; esac ;; + linux* | k*bsd*-gnu | gnu*) + _LT_TAGVAR(link_all_deplibs, $1)=no + ;; *) _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' ;; @@ -5001,6 +5012,9 @@ dnl Note also adjust exclude_expsyms for C++ above. openbsd* | bitrig*) with_gnu_ld=no ;; + linux* | k*bsd*-gnu | gnu*) + _LT_TAGVAR(link_all_deplibs, $1)=no + ;; esac _LT_TAGVAR(ld_shlibs, $1)=yes @@ -5255,7 +5269,7 @@ _LT_EOF fi ;; - netbsd*) + netbsd* | netbsdelf*-gnu) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' wlarc= @@ -5776,6 +5790,7 @@ _LT_EOF if test yes = "$lt_cv_irix_exported_symbol"; then _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations $wl-exports_file $wl$export_symbols -o $lib' fi + _LT_TAGVAR(link_all_deplibs, $1)=no else _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -exports_file $export_symbols -o $lib' @@ -5797,7 +5812,7 @@ _LT_EOF esac ;; - netbsd*) + netbsd* | netbsdelf*-gnu) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out else @@ -6423,7 +6438,7 @@ if test yes != "$_lt_caught_CXX_error"; then # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. - output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' + output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP " \-L"' else GXX=no @@ -6798,7 +6813,7 @@ if test yes != "$_lt_caught_CXX_error"; then # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. - output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $EGREP "\-L"`; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' + output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $EGREP " \-L"`; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' ;; *) if test yes = "$GXX"; then @@ -6863,7 +6878,7 @@ if test yes != "$_lt_caught_CXX_error"; then # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. - output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $GREP "\-L"`; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' + output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $GREP " \-L"`; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' ;; *) if test yes = "$GXX"; then @@ -7202,7 +7217,7 @@ if test yes != "$_lt_caught_CXX_error"; then # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. - output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' + output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP " \-L"' else # FIXME: insert proper C++ library support @@ -7286,7 +7301,7 @@ if test yes != "$_lt_caught_CXX_error"; then # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. - output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' + output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP " \-L"' else # g++ 2.7 appears to require '-G' NOT '-shared' on this # platform. @@ -7297,7 +7312,7 @@ if test yes != "$_lt_caught_CXX_error"; then # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. - output_verbose_link_cmd='$CC -G $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' + output_verbose_link_cmd='$CC -G $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP " \-L"' fi _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-R $wl$libdir' diff --git a/dist/libxcb/src/xcb_in.c b/dist/libxcb/src/xcb_in.c index 73209e0c4..58fe8962e 100644 --- a/dist/libxcb/src/xcb_in.c +++ b/dist/libxcb/src/xcb_in.c @@ -958,8 +958,20 @@ void _xcb_in_replies_done(xcb_connection_t *c) pend = container_of(c->in.pending_replies_tail, struct pending_reply, next); if(pend->workaround == WORKAROUND_EXTERNAL_SOCKET_OWNER) { - pend->last_request = c->out.request; - pend->workaround = WORKAROUND_NONE; + if (XCB_SEQUENCE_COMPARE(pend->first_request, <=, c->out.request)) { + pend->last_request = c->out.request; + pend->workaround = WORKAROUND_NONE; + } else { + /* The socket was taken, but no requests were actually sent + * so just discard the pending_reply that was created. + */ + struct pending_reply **prev_next = &c->in.pending_replies; + while (*prev_next != pend) + prev_next = &(*prev_next)->next; + *prev_next = NULL; + c->in.pending_replies_tail = prev_next; + free(pend); + } } } } diff --git a/dist/libxcb/src/xcb_out.c b/dist/libxcb/src/xcb_out.c index 3601a5fa4..c9593e5f2 100644 --- a/dist/libxcb/src/xcb_out.c +++ b/dist/libxcb/src/xcb_out.c @@ -387,8 +387,14 @@ int xcb_take_socket(xcb_connection_t *c, void (*return_socket)(void *closure), v { c->out.return_socket = return_socket; c->out.socket_closure = closure; - if(flags) - _xcb_in_expect_reply(c, c->out.request, WORKAROUND_EXTERNAL_SOCKET_OWNER, flags); + if(flags) { + /* c->out.request + 1 will be the first request sent by the external + * socket owner. If the socket is returned before this request is sent + * it will be detected in _xcb_in_replies_done and this pending_reply + * will be discarded. + */ + _xcb_in_expect_reply(c, c->out.request + 1, WORKAROUND_EXTERNAL_SOCKET_OWNER, flags); + } assert(c->out.request == c->out.request_written); *sent = c->out.request; } diff --git a/lib/libxcb/src/Makefile b/lib/libxcb/src/Makefile index 7ba60ee7d..6064ffaa2 100644 --- a/lib/libxcb/src/Makefile +++ b/lib/libxcb/src/Makefile @@ -1,4 +1,4 @@ -# $OpenBSD: Makefile,v 1.10 2018/09/11 19:34:57 matthieu Exp $ +# $OpenBSD: Makefile,v 1.11 2018/10/04 20:17:48 matthieu Exp $ # This Makefile is used to generate the sources files with xcbgen # The x11/py-xcbgen package needs to be installed @@ -6,7 +6,7 @@ DATADIR= ${X11BASE}/share PYTHON= python${PYTHON_VERSION} -MANOPTIONS= -c 'libxcb 1.13' -l 'X Version 11' -s 3 +MANOPTIONS= -c 'libxcb 1.13.1' -l 'X Version 11' -s 3 SRCS= \ bigreq.c \ diff --git a/lib/libxcb/src/config.h b/lib/libxcb/src/config.h index acd2bfa43..a33c9f907 100644 --- a/lib/libxcb/src/config.h +++ b/lib/libxcb/src/config.h @@ -77,7 +77,7 @@ #define PACKAGE_NAME "libxcb" /* Define to the full name and version of this package. */ -#define PACKAGE_STRING "libxcb 1.13" +#define PACKAGE_STRING "libxcb 1.13.1" /* Define to the one symbol short name of this package. */ #define PACKAGE_TARNAME "libxcb" @@ -86,7 +86,7 @@ #define PACKAGE_URL "" /* Define to the version of this package. */ -#define PACKAGE_VERSION "1.13" +#define PACKAGE_VERSION "1.13.1" /* Major version of this package */ #define PACKAGE_VERSION_MAJOR 1 @@ -95,7 +95,7 @@ #define PACKAGE_VERSION_MINOR 13 /* Patch version of this package */ -#define PACKAGE_VERSION_PATCHLEVEL 0 +#define PACKAGE_VERSION_PATCHLEVEL 1 /* Define to 1 if you have the ANSI C header files. */ #define STDC_HEADERS 1