diff options
author | Guillaume Desmottes <guillaume.desmottes@collabora.co.uk> | 2009-10-19 18:58:52 +0800 |
---|---|---|
committer | Guillaume Desmottes <guillaume.desmottes@collabora.co.uk> | 2009-10-19 19:09:29 +0800 |
commit | 32aa948aa160687c968fffaf22a68d8d4df08ec3 (patch) | |
tree | d561040e6ab7a2e0de08df5bc34f120e584fda65 /libempathy | |
parent | c0ea5c2be72209daa5984752de3ca3e8c090de19 (diff) | |
download | gsoc2013-empathy-32aa948aa160687c968fffaf22a68d8d4df08ec3.tar gsoc2013-empathy-32aa948aa160687c968fffaf22a68d8d4df08ec3.tar.gz gsoc2013-empathy-32aa948aa160687c968fffaf22a68d8d4df08ec3.tar.bz2 gsoc2013-empathy-32aa948aa160687c968fffaf22a68d8d4df08ec3.tar.lz gsoc2013-empathy-32aa948aa160687c968fffaf22a68d8d4df08ec3.tar.xz gsoc2013-empathy-32aa948aa160687c968fffaf22a68d8d4df08ec3.tar.zst gsoc2013-empathy-32aa948aa160687c968fffaf22a68d8d4df08ec3.zip |
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.
Diffstat (limited to 'libempathy')
-rw-r--r-- | 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 33029a9d9..ea5a1e618 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 |