Use locks in factory's weak object notify callback on data-book/cal
authorMilan Crha <mcrha@redhat.com>
Fri, 11 May 2012 14:48:30 +0000 (16:48 +0200)
committerMilan Crha <mcrha@redhat.com>
Fri, 11 May 2012 14:48:30 +0000 (16:48 +0200)
addressbook/libedata-book/e-data-book-factory.c
calendar/libedata-cal/e-data-cal-factory.c

index 4a1f082..bf8e67b 100644 (file)
@@ -144,6 +144,9 @@ book_freed_cb (EDataBookFactory *factory,
 
        d (g_debug ("in factory %p (%p) is dead", factory, dead));
 
+       g_mutex_lock (priv->books_lock);
+       g_mutex_lock (priv->connections_lock);
+
        g_hash_table_foreach_remove (
                priv->books, remove_dead_pointer_cb, dead);
 
@@ -164,6 +167,9 @@ book_freed_cb (EDataBookFactory *factory,
                }
        }
 
+       g_mutex_unlock (priv->connections_lock);
+       g_mutex_unlock (priv->books_lock);
+
        e_dbus_server_release (E_DBUS_SERVER (factory));
 }
 
index d16d7c7..a425556 100644 (file)
@@ -159,6 +159,9 @@ calendar_freed_cb (EDataCalFactory *factory,
 
        d (g_debug ("in factory %p (%p) is dead", factory, dead));
 
+       g_mutex_lock (priv->calendars_lock);
+       g_mutex_lock (priv->connections_lock);
+
        g_hash_table_foreach_remove (
                priv->calendars, remove_dead_calendar_cb, dead);
 
@@ -179,6 +182,9 @@ calendar_freed_cb (EDataCalFactory *factory,
                }
        }
 
+       g_mutex_unlock (priv->connections_lock);
+       g_mutex_unlock (priv->calendars_lock);
+
        e_dbus_server_release (E_DBUS_SERVER (factory));
 }