[OE-core] [PATCH] xserver-xorg: don't close already-closed connections

Ross Burton ross.burton at intel.com
Mon Mar 9 17:40:37 UTC 2015


On shutdown xserver was closing connections that were already closed, resulting
in a segfault.

Signed-off-by: Ross Burton <ross.burton at intel.com>
---
 .../xorg-xserver/xserver-xorg/xtrans.patch         |   38 ++++++++++++++++++++
 .../xorg-xserver/xserver-xorg_1.16.3.bb            |    1 +
 2 files changed, 39 insertions(+)
 create mode 100644 meta/recipes-graphics/xorg-xserver/xserver-xorg/xtrans.patch

diff --git a/meta/recipes-graphics/xorg-xserver/xserver-xorg/xtrans.patch b/meta/recipes-graphics/xorg-xserver/xserver-xorg/xtrans.patch
new file mode 100644
index 0000000..e6dba04
--- /dev/null
+++ b/meta/recipes-graphics/xorg-xserver/xserver-xorg/xtrans.patch
@@ -0,0 +1,38 @@
+Upstream-Status: Submitted
+Signed-off-by: Ross Burton <ross.burton at intel.com>
+
+Since _XSERVTransClose frees the connection pointer passed to it,
+remove that pointer from the array, so we don't try to double free it
+if we come back into CloseWellKnownConnections again.
+
+Should fix https://bugzilla.yoctoproject.org/show_bug.cgi?id=6665 in which
+the shutdown section of the main() loop called CloseWellKnownConnections()
+and then moved on to ddxGiveUp(), which failed to release the VT and thus
+called AbortServer(), which called CloseWellKnownConnections() again.
+
+Signed-off-by: Alan Coopersmith <alan.coopersmith at oracle.com>
+Reviewed-by: Adam Jackson <ajax at redhat.com>
+---
+ os/connection.c |    9 +++++++--
+ 1 file changed, 7 insertions(+), 2 deletions(-)
+
+diff --git a/os/connection.c b/os/connection.c
+index ddfe50a..7ff44e1 100644
+--- a/os/connection.c
++++ b/os/connection.c
+@@ -513,8 +513,13 @@ CloseWellKnownConnections(void)
+ {
+     int i;
+
+-    for (i = 0; i < ListenTransCount; i++)
+-        _XSERVTransClose(ListenTransConns[i]);
++    for (i = 0; i < ListenTransCount; i++) {
++        if (ListenTransConns[i] != NULL) {
++            _XSERVTransClose(ListenTransConns[i]);
++            ListenTransConns[i] = NULL;
++        }
++    }
++    ListenTransCount = 0;
+ }
+
+ static void
diff --git a/meta/recipes-graphics/xorg-xserver/xserver-xorg_1.16.3.bb b/meta/recipes-graphics/xorg-xserver/xserver-xorg_1.16.3.bb
index 347ce3b..9d9ede2 100644
--- a/meta/recipes-graphics/xorg-xserver/xserver-xorg_1.16.3.bb
+++ b/meta/recipes-graphics/xorg-xserver/xserver-xorg_1.16.3.bb
@@ -5,6 +5,7 @@ SRC_URI += "file://fix_open_max_preprocessor_error.patch \
             file://xorg-CVE-2013-6424.patch \
             file://xshmfence-option.patch \
             file://Fix-subwindow-in-Xi-emulated-events.patch \
+            file://xtrans.patch \
            "
 
 SRC_URI[md5sum] = "afd93977235584a9caa7528a737c1b52"
-- 
1.7.10.4




More information about the Openembedded-core mailing list