[Telepathy-commits] [telepathy-mission-control/master] Disconnect signals when removing accounts

Alberto Mardegan alberto.mardegan at nokia.com
Mon Feb 16 02:26:20 PST 2009


---
 src/mcd-account-manager.c |   18 +++++++++++++++++-
 1 files changed, 17 insertions(+), 1 deletions(-)

diff --git a/src/mcd-account-manager.c b/src/mcd-account-manager.c
index 2bba2e2..887c96f 100644
--- a/src/mcd-account-manager.c
+++ b/src/mcd-account-manager.c
@@ -139,6 +139,22 @@ on_account_removed (McdAccount *account, McdAccountManager *account_manager)
 }
 
 static void
+unref_account (gpointer data)
+{
+    McdAccount *account = MCD_ACCOUNT (data);
+    McdAccountManager *account_manager;
+
+    g_debug ("%s called for %s", G_STRFUNC,
+             mcd_account_get_unique_name (account));
+    account_manager = mcd_account_get_account_manager (account);
+    g_signal_handlers_disconnect_by_func (account, on_account_validity_changed,
+                                          account_manager);
+    g_signal_handlers_disconnect_by_func (account, on_account_removed,
+                                          account_manager);
+    g_object_unref (account);
+}
+
+static void
 add_account (McdAccountManager *account_manager, McdAccount *account)
 {
     McdAccountManagerPrivate *priv = account_manager->priv;
@@ -651,7 +667,7 @@ mcd_account_manager_init (McdAccountManager *account_manager)
     account_manager->priv = priv;
 
     priv->accounts = g_hash_table_new_full (g_str_hash, g_str_equal,
-					    NULL, g_object_unref);
+					    NULL, unref_account);
 
     priv->keyfile = g_key_file_new ();
     conf_filename = get_account_conf_filename ();
-- 
1.5.6.5




More information about the telepathy-commits mailing list