From 7ac98ae2d052bbdffef96d1f9188ed16c1a8c43f Mon Sep 17 00:00:00 2001 From: Matthias Clasen Date: Sep 08 2011 17:40:19 +0000 Subject: fix a gnome-shell crash --- 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 - 1:0.6.2-2 +- Fix a reentrancy problem that causes gnome-shell to crash + * Thu Sep 8 2011 Matthias Clasen - 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 +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); + }