From: Guillaume Desmottes Date: Mon, 19 Oct 2009 10:58:52 +0000 (+0100) Subject: empathy-account-settings: don't cache the TpConnectionManagerProtocol X-Git-Url: https://git.0d.be/?p=empathy.git;a=commitdiff_plain;h=98241a08a60d0741e6d00f52775ccad85d6693c3 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. --- diff --git a/libempathy/empathy-account-settings.c b/libempathy/empathy-account-settings.c index 33029a9d..ea5a1e61 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