[empathy] empathy-account-settings: don't cache the TpConnectionManagerProtocol



commit 98241a08a60d0741e6d00f52775ccad85d6693c3
Author: Guillaume Desmottes <guillaume desmottes collabora co uk>
Date:   Mon Oct 19 11:58:52 2009 +0100

    empathy-account-settings: don't cache the TpConnectionManagerProtocol
    
    The result of tp_connection_manager_get_protocol isn't garanteed to be
    valid after the main loop re-entered. We can't cache it in the account
    settings and so have to request it each time we need it.

 libempathy/empathy-account-settings.c |   18 ++++++++++++------
 1 files changed, 12 insertions(+), 6 deletions(-)
---
diff --git a/libempathy/empathy-account-settings.c b/libempathy/empathy-account-settings.c
index 33029a9..ea5a1e6 100644
--- a/libempathy/empathy-account-settings.c
+++ b/libempathy/empathy-account-settings.c
@@ -55,7 +55,6 @@ struct _EmpathyAccountSettingsPriv
   gulong account_manager_ready_id;
 
   TpConnectionManager *manager;
-  const TpConnectionManagerProtocol *tp_protocol;
 
   EmpathyAccount *account;
   gchar *cm_name;
@@ -353,6 +352,7 @@ static void
 empathy_account_settings_check_readyness (EmpathyAccountSettings *self)
 {
   EmpathyAccountSettingsPriv *priv = GET_PRIV (self);
+  const TpConnectionManagerProtocol *tp_protocol;
 
   if (priv->ready)
     return;
@@ -380,10 +380,10 @@ empathy_account_settings_check_readyness (EmpathyAccountSettings *self)
         g_strdup (empathy_account_get_icon_name (priv->account));
     }
 
-  priv->tp_protocol = tp_connection_manager_get_protocol (priv->manager,
+  tp_protocol = tp_connection_manager_get_protocol (priv->manager,
     priv->protocol);
 
-  if (priv->tp_protocol == NULL)
+  if (tp_protocol == NULL)
     {
       priv->manager = NULL;
       return;
@@ -396,7 +396,7 @@ empathy_account_settings_check_readyness (EmpathyAccountSettings *self)
 
       priv->required_params = g_array_new (TRUE, FALSE, sizeof (gchar *));
 
-      for (cur = priv->tp_protocol->params; cur->name != NULL; cur++)
+      for (cur = tp_protocol->params; cur->name != NULL; cur++)
         {
           if (tp_connection_manager_param_is_required (cur))
             {
@@ -446,10 +446,16 @@ TpConnectionManagerParam *
 empathy_account_settings_get_tp_params (EmpathyAccountSettings *settings)
 {
   EmpathyAccountSettingsPriv *priv = GET_PRIV (settings);
+  const TpConnectionManagerProtocol *tp_protocol;
+
+  g_return_val_if_fail (priv->manager != NULL, NULL);
+  g_return_val_if_fail (priv->protocol != NULL, NULL);
 
-  g_return_val_if_fail (priv->tp_protocol != NULL, NULL);
+  tp_protocol = tp_connection_manager_get_protocol (priv->manager,
+     priv->protocol);
+  g_return_val_if_fail (tp_protocol != NULL, NULL);
 
-  return priv->tp_protocol->params;
+  return tp_protocol->params;
 }
 
 gboolean



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