summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSimon McVittie <simon.mcvittie@collabora.co.uk>2010-05-26 16:08:32 +0100
committerSimon McVittie <simon.mcvittie@collabora.co.uk>2010-05-26 16:08:32 +0100
commit603f1fb47b08fc329868d6284022e9e397fd73d8 (patch)
tree2c79084013323906142938bf932afee7c721e338
parentd408af59e2e5066ee87a6ef9c718500b335f704c (diff)
downloadtelepathy-mission-control-603f1fb47b08fc329868d6284022e9e397fd73d8.tar.gz
_mcd_account_set_parameters: don't assume that borrowed parameters remain valid
-rw-r--r--src/mcd-account.c13
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;