diff options
author | Simon McVittie <simon.mcvittie@collabora.co.uk> | 2010-05-26 16:08:32 +0100 |
---|---|---|
committer | Simon McVittie <simon.mcvittie@collabora.co.uk> | 2010-05-26 16:08:32 +0100 |
commit | 603f1fb47b08fc329868d6284022e9e397fd73d8 (patch) | |
tree | 2c79084013323906142938bf932afee7c721e338 | |
parent | d408af59e2e5066ee87a6ef9c718500b335f704c (diff) | |
download | telepathy-mission-control-603f1fb47b08fc329868d6284022e9e397fd73d8.tar.gz |
_mcd_account_set_parameters: don't assume that borrowed parameters remain valid
-rw-r--r-- | src/mcd-account.c | 13 |
1 files changed, 9 insertions, 4 deletions
diff --git a/src/mcd-account.c b/src/mcd-account.c index 06d78cc6..06396055 100644 --- a/src/mcd-account.c +++ b/src/mcd-account.c @@ -2243,6 +2243,7 @@ typedef struct GHashTableIter iter; gchar **unset; gchar **unset_iter; + TpConnectionManagerProtocol *protocol; const TpConnectionManagerParam *param; const GValue *new; guint n_params; @@ -2267,6 +2268,8 @@ set_parameters_data_free (SetParametersData *data) if (data->dbus_properties != NULL) g_slist_free (data->dbus_properties); + _mcd_manager_protocol_free (data->protocol); + g_slice_free (SetParametersData, data); } @@ -2507,12 +2510,12 @@ _mcd_account_set_parameters (McdAccount *account, GHashTable *params, gpointer user_data) { McdAccountPrivate *priv = account->priv; - const TpConnectionManagerParam *param; GSList *dbus_properties = NULL; GPtrArray *not_yet = NULL; SetParametersData *data; GError *error = NULL; guint unset_size; + TpConnectionManagerProtocol *protocol; DEBUG ("called"); if (G_UNLIKELY (!priv->manager && !load_manager (account))) @@ -2522,8 +2525,9 @@ _mcd_account_set_parameters (McdAccount *account, GHashTable *params, goto error; } - param = mcd_manager_get_parameters (priv->manager, priv->protocol_name); - if (G_UNLIKELY (!param)) + protocol = _mcd_manager_dup_protocol (priv->manager, priv->protocol_name); + + if (G_UNLIKELY (protocol == NULL)) { g_set_error (&error, TP_ERRORS, TP_ERROR_INVALID_ARGUMENT, "Protocol %s not found", priv->protocol_name); @@ -2538,9 +2542,10 @@ _mcd_account_set_parameters (McdAccount *account, GHashTable *params, data = g_slice_new0 (SetParametersData); data->account = g_object_ref (account); + data->protocol = protocol; data->params = hash_table_copy (params); data->unset = g_strdupv ((gchar **) unset); - data->param = param; + data->param = protocol->params; data->n_params = 0; data->dbus_properties = dbus_properties; data->not_yet = not_yet; |