[glib2] Fix a GDBus segfault

Matthias Clasen mclasen at fedoraproject.org
Wed Nov 23 14:39:47 UTC 2011


commit ce1e8c81d55bf8c4a26930e3974e8060641c8ad4
Author: Matthias Clasen <mclasen at redhat.com>
Date:   Wed Nov 23 09:39:14 2011 -0500

    Fix a GDBus segfault

 ...-continue_writing-initialize-flush_async_.patch |   55 ++++++++++++++++++++
 glib2.spec                                         |    8 +++-
 2 files changed, 62 insertions(+), 1 deletions(-)
---
diff --git a/0001-GDBusWorker-continue_writing-initialize-flush_async_.patch b/0001-GDBusWorker-continue_writing-initialize-flush_async_.patch
new file mode 100644
index 0000000..4b9b5cd
--- /dev/null
+++ b/0001-GDBusWorker-continue_writing-initialize-flush_async_.patch
@@ -0,0 +1,55 @@
+From 968ef5f5ffbe5e694bae3052bea34e9b9d1aef35 Mon Sep 17 00:00:00 2001
+From: Simon McVittie <simon.mcvittie at collabora.co.uk>
+Date: Wed, 23 Nov 2011 11:20:15 +0000
+Subject: [PATCH 1/2] GDBusWorker: continue_writing: initialize
+ flush_async_data if closing
+
+This was a regression in commit f41178c6c: flush_async_data wasn't
+necessarily NULL in the "don't flush" case.
+
+Also move initialization of these variables up so that it's
+unconditional, since that's easier to verify than checking
+that each branch gets it right.
+
+Bug: https://bugzilla.gnome.org/show_bug.cgi?id=664617
+Signed-off-by: Simon McVittie <simon.mcvittie at collabora.co.uk>
+---
+ gio/gdbusprivate.c |    8 +++-----
+ 1 files changed, 3 insertions(+), 5 deletions(-)
+
+diff --git a/gio/gdbusprivate.c b/gio/gdbusprivate.c
+index 178214e..5b3b77d 100644
+--- a/gio/gdbusprivate.c
++++ b/gio/gdbusprivate.c
+@@ -1441,6 +1441,9 @@ continue_writing (GDBusWorker *worker)
+ 
+   g_mutex_lock (&worker->write_lock);
+ 
++  data = NULL;
++  flush_async_data = NULL;
++
+   /* if we want to close the connection, that takes precedence */
+   if (worker->pending_close_attempts != NULL)
+     {
+@@ -1450,7 +1453,6 @@ continue_writing (GDBusWorker *worker)
+       g_io_stream_close_async (worker->stream, G_PRIORITY_DEFAULT,
+                                NULL, iostream_close_cb,
+                                _g_dbus_worker_ref (worker));
+-      data = NULL;
+     }
+   else
+     {
+@@ -1463,10 +1465,6 @@ continue_writing (GDBusWorker *worker)
+           if (data != NULL)
+             worker->output_pending = PENDING_WRITE;
+         }
+-      else
+-        {
+-          data = NULL;
+-        }
+     }
+ 
+   g_mutex_unlock (&worker->write_lock);
+-- 
+1.7.7.1
+
diff --git a/glib2.spec b/glib2.spec
index 9a5ecf6..4012194 100644
--- a/glib2.spec
+++ b/glib2.spec
@@ -3,13 +3,15 @@
 Summary: A library of handy utility functions
 Name: glib2
 Version: 2.31.2
-Release: 1%{?dist}
+Release: 2%{?dist}
 License: LGPLv2+
 Group: System Environment/Libraries
 URL: http://www.gtk.org
 #VCS: git:git://git.gnome.org/glib
 Source: http://download.gnome.org/sources/glib/2.31/glib-%{version}.tar.xz
 
+# upstream fix
+Patch0: 0001-GDBusWorker-continue_writing-initialize-flush_async_.patch
 BuildRequires: pkgconfig
 BuildRequires: gamin-devel
 BuildRequires: gettext
@@ -57,6 +59,7 @@ The glib2-static package includes static libraries of the GLib library.
 
 %prep
 %setup -q -n glib-%{version}
+%patch0 -p1
 
 %build
 # Support builds of both git snapshots and tarballs packed with autogoo
@@ -159,6 +162,9 @@ gio-querymodules-%{__isa_bits} %{_libdir}/gio/modules
 
 
 %changelog
+* Wed Nov 23 2011 Matthias Clasen <mclasen at redhat.com> - 2.31.2-2
+- Fix a GDBus regression leading to segfaults
+
 * Mon Nov 21 2011 Matthias Clasen <mclasen at redhat.com> - 2.31.2-1
 - Update to 2.31.2
 


More information about the scm-commits mailing list