summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSimon McVittie <simon.mcvittie@collabora.co.uk>2010-05-26 16:09:06 +0100
committerSimon McVittie <simon.mcvittie@collabora.co.uk>2010-05-26 16:09:06 +0100
commit80b75c38c6147eee494e8bf0d63309f4555d8d03 (patch)
tree546be86d85a050aa633a01a98799391953fe9bc9
parent603f1fb47b08fc329868d6284022e9e397fd73d8 (diff)
downloadtelepathy-mission-control-80b75c38c6147eee494e8bf0d63309f4555d8d03.tar.gz
_mcd_account_dup_parameters: don't assume that borrowed parameters remain valid
-rw-r--r--src/mcd-account.c23
1 files changed, 16 insertions, 7 deletions
diff --git a/src/mcd-account.c b/src/mcd-account.c
index 06396055..2d2a5215 100644
--- a/src/mcd-account.c
+++ b/src/mcd-account.c
@@ -3153,12 +3153,20 @@ mcd_account_get_object_path (McdAccount *account)
typedef struct
{
GHashTable *params;
+ TpConnectionManagerProtocol *protocol;
const TpConnectionManagerParam *param;
McdAccountDupParametersCb callback;
gpointer user_data;
} DupParametersData;
static void
+dup_parameters_data_free (DupParametersData *data)
+{
+ _mcd_manager_protocol_free (data->protocol);
+ g_slice_free (DupParametersData, data);
+}
+
+static void
dup_parameters_get_parameter_cb (McdAccount *account,
const GValue *value,
const GError *error,
@@ -3183,7 +3191,7 @@ dup_parameters_get_parameter_cb (McdAccount *account,
{
if (data->callback != NULL)
data->callback (account, data->params, data->user_data);
- g_slice_free (DupParametersData, data);
+ dup_parameters_data_free (data);
}
}
@@ -3204,7 +3212,7 @@ _mcd_account_dup_parameters (McdAccount *account,
{
McdAccountPrivate *priv;
DupParametersData *data;
- const TpConnectionManagerParam *param;
+ TpConnectionManagerProtocol *protocol;
g_return_if_fail (MCD_IS_ACCOUNT (account));
@@ -3217,17 +3225,18 @@ _mcd_account_dup_parameters (McdAccount *account,
return;
}
- param = mcd_manager_get_parameters (priv->manager,
- priv->protocol_name);
+ protocol = _mcd_manager_dup_protocol (priv->manager,
+ priv->protocol_name);
- if (G_UNLIKELY (!param))
+ if (G_UNLIKELY (protocol == NULL))
{
callback (account, NULL, user_data);
return;
}
data = g_slice_new0 (DupParametersData);
- data->param = param;
+ data->protocol = protocol;
+ data->param = protocol->params;
data->callback = callback;
data->user_data = user_data;
@@ -3235,7 +3244,7 @@ _mcd_account_dup_parameters (McdAccount *account,
g_free,
(GDestroyNotify) tp_g_value_slice_free);
- mcd_account_get_parameter (account, param->name,
+ mcd_account_get_parameter (account, data->param->name,
dup_parameters_get_parameter_cb, data);
}