telepathy-mission-control: McdAccountManager: if an account is async-added during setup, wait for it

Simon McVittie smcv at kemper.freedesktop.org
Thu Feb 6 05:06:51 PST 2014


Module: telepathy-mission-control
Branch: master
Commit: 5090a5d462bfaa62300fa0526c043f60759306a6
URL:    http://cgit.freedesktop.org/telepathy/telepathy-mission-control/commit/?id=5090a5d462bfaa62300fa0526c043f60759306a6

Author: Simon McVittie <simon.mcvittie at collabora.co.uk>
Date:   Wed Feb  5 12:40:34 2014 +0000

McdAccountManager: if an account is async-added during setup, wait for it

Previously, we'd only wait for accounts added in mcd_storage_load()
to become ready.

Bug: https://bugs.freedesktop.org/show_bug.cgi?id=74581
Reviewed-by: Guillaume Desmottes <guillaume.desmottes at collabora.co.uk>

---

 src/mcd-account-manager.c |   10 ++++++++++
 1 file changed, 10 insertions(+)

diff --git a/src/mcd-account-manager.c b/src/mcd-account-manager.c
index 593e698..489de45 100644
--- a/src/mcd-account-manager.c
+++ b/src/mcd-account-manager.c
@@ -100,6 +100,7 @@ typedef struct
     McpAccountStorage *storage_plugin;
     McdAccount *account;
     gint account_lock;
+    gboolean holds_setup_lock;
 } McdLoadAccountsData;
 
 typedef struct
@@ -296,6 +297,12 @@ created_cb (GObject *storage_plugin_obj,
         lad->storage_plugin = g_object_ref (plugin);
         lad->account_lock = 1; /* released at the end of this function */
         lad->account = g_object_ref (account);
+
+        if (self->priv->setup_lock > 0)
+        {
+            lad->holds_setup_lock = TRUE;
+            self->priv->setup_lock++;
+        }
     }
     else
     {
@@ -1132,6 +1139,9 @@ release_load_accounts_lock (McdLoadAccountsData *lad)
 
     if (lad->account_lock == 0)
     {
+        if (lad->holds_setup_lock)
+            release_setup_lock (lad->account_manager);
+
         g_object_unref (lad->account_manager);
         g_object_unref (lad->storage_plugin);
         g_object_unref (lad->account);



More information about the telepathy-commits mailing list