banshee r4379 - in trunk/banshee: . src/Libraries/Hyena/Hyena.Data



Author: gburt
Date: Fri Aug 15 18:07:36 2008
New Revision: 4379
URL: http://svn.gnome.org/viewvc/banshee?rev=4379&view=rev

Log:
2008-08-15  Gabriel Burt  <gabriel burt gmail com>

	* src/Libraries/Hyena/Hyena.Data/PropertyStore.cs: Fix deadlock caused by
	a property change event triggering a propety get/set/remove.


Modified:
   trunk/banshee/ChangeLog
   trunk/banshee/src/Libraries/Hyena/Hyena.Data/PropertyStore.cs

Modified: trunk/banshee/src/Libraries/Hyena/Hyena.Data/PropertyStore.cs
==============================================================================
--- trunk/banshee/src/Libraries/Hyena/Hyena.Data/PropertyStore.cs	(original)
+++ trunk/banshee/src/Libraries/Hyena/Hyena.Data/PropertyStore.cs	Fri Aug 15 18:07:36 2008
@@ -94,13 +94,19 @@
             
         public void Remove(string name)
         {
+            bool raise = false;
+            object old_value = null;
             lock(this) {
                 if(object_store.ContainsKey(name)) {
-                    object old_value = object_store[name];
+                    old_value = object_store[name];
                     object_store.Remove(name);
-                    OnPropertyChanged(name, false, true, old_value, null);
+                    raise = true;
                 }
             }
+
+            if (raise) {
+                OnPropertyChanged(name, false, true, old_value, null);
+            }
         }
         
         public void RemoveStartingWith (string prefix)
@@ -126,10 +132,9 @@
         
         public void Set<T>(string name, T value)
         {
+            bool added = false;
+            T old_value = default(T);
             lock(this) {
-                bool added = false;
-                T old_value = default(T);
-                
                 if(object_store == null) {
                     object_store = new Dictionary<string, object>();
                 }
@@ -143,9 +148,8 @@
                     added = true;
                     object_store.Add(name, value);
                 }
-                
-                OnPropertyChanged(name, added, false, old_value, value);
             }
+            OnPropertyChanged(name, added, false, old_value, value);
         }
         
         public T Get<T>(string name)



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]