[folks/f16] fix a gnome-shell crash

Matthias Clasen mclasen at fedoraproject.org
Thu Sep 8 17:41:35 UTC 2011


commit 7ac98ae2d052bbdffef96d1f9188ed16c1a8c43f
Author: Matthias Clasen <mclasen at redhat.com>
Date:   Thu Sep 8 13:40:19 2011 -0400

    fix a gnome-shell crash

 folks.spec                   |    9 ++++++++-
 reentrancy-is-the-suck.patch |   31 +++++++++++++++++++++++++++++++
 2 files changed, 39 insertions(+), 1 deletions(-)
---
diff --git a/folks.spec b/folks.spec
index d8ff2aa..afde505 100644
--- a/folks.spec
+++ b/folks.spec
@@ -3,7 +3,7 @@
 Name:           folks
 Epoch:          1
 Version:        0.6.2
-Release:        1%{?dist}
+Release:        2%{?dist}
 Summary:        GObject contact aggregation library
 
 Group:          System Environment/Libraries
@@ -14,6 +14,9 @@ Source0:        http://download.gnome.org/sources/folks/0.6/%{name}-%{version}.t
 # https://bugzilla.gnome.org/show_bug.cgi?id=658002
 Patch0: folks-typelib.patch
 
+# upstream fix
+Patch1: reentrancy-is-the-suck.patch
+
 BuildRequires:  telepathy-glib-devel >= %{tp_glib_ver}
 BuildRequires:  telepathy-glib-vala
 BuildRequires:  glib2-devel
@@ -51,6 +54,7 @@ developing applications that use %{name}.
 %prep
 %setup -q
 %patch0 -p1
+%patch1 -p1
 
 autoreconf -i -f
 
@@ -88,6 +92,9 @@ find $RPM_BUILD_ROOT -name '*.la' -exec rm -f {} ';'
 
 
 %changelog
+* Thu Sep  8 2011 Matthias Clasen <mclasen at redhat.com> - 1:0.6.2-2
+- Fix a reentrancy problem that causes gnome-shell to crash
+
 * Thu Sep  8 2011 Matthias Clasen <mclasen at redhat.com> - 1:0.6.2-1
 - Update to 0.6.2
 
diff --git a/reentrancy-is-the-suck.patch b/reentrancy-is-the-suck.patch
new file mode 100644
index 0000000..e6a4c82
--- /dev/null
+++ b/reentrancy-is-the-suck.patch
@@ -0,0 +1,31 @@
+commit b00dc238aa393a6047b23df39269be00d2342ae2
+Author: Raul Gutierrez Segales <rgs at collabora.co.uk>
+Date:   Thu Sep 8 18:19:35 2011 +0100
+
+    IndividualAggregator: copy the list of stores before looping over it
+    
+    Because a Backend's list of PersonaStores can change while we are
+    iterating it, we do a copy before starting.
+    
+    Fixes: https://bugzilla.gnome.org/show_bug.cgi?id=658580
+
+diff --git a/folks/individual-aggregator.vala b/folks/individual-aggregator.vala
+index 4b158ae..a863800 100644
+--- a/folks/individual-aggregator.vala
++++ b/folks/individual-aggregator.vala
+@@ -548,8 +548,13 @@ public class Folks.IndividualAggregator : Object
+           backend.notify["is-quiescent"].connect (
+               this._backend_is_quiescent_changed_cb);
+ 
+-          /* handle the stores that have already been signaled */
+-          foreach (var persona_store in backend.persona_stores.values)
++          /* Handle the stores that have already been signaled. Since
++           * this might change while we are looping, get a copy first.
++           *
++           * https://bugzilla.gnome.org/show_bug.cgi?id=658580
++           */
++          var stores = backend.persona_stores.values.to_array ();
++          foreach (var persona_store in stores)
+               {
+                 this._backend_persona_store_added_cb (backend, persona_store);
+               }


More information about the scm-commits mailing list