diff options
author | William Jon McCann <mccann@jhu.edu> | 2007-03-13 11:41:31 -0400 |
---|---|---|
committer | William Jon McCann <mccann@jhu.edu> | 2007-03-13 11:41:31 -0400 |
commit | 4a639d92a6f1a5dd8f59d57ade37d4cff420b66a (patch) | |
tree | cb6081df5fd92f3b3edd28d884e887fb4cc49424 /src/ck-session.c | |
parent | 1e7af7e9c648fb461e0d36d037d2920519159525 (diff) |
various leak fixes
Diffstat (limited to 'src/ck-session.c')
-rw-r--r-- | src/ck-session.c | 32 |
1 files changed, 19 insertions, 13 deletions
diff --git a/src/ck-session.c b/src/ck-session.c index e513bc3..c88cbbc 100644 --- a/src/ck-session.c +++ b/src/ck-session.c @@ -1064,6 +1064,8 @@ ck_session_finalize (GObject *object) g_free (session->priv->seat_id); g_free (session->priv->session_type); g_free (session->priv->x11_display); + g_free (session->priv->display_device); + g_free (session->priv->x11_display_device); g_free (session->priv->remote_host_name); G_OBJECT_CLASS (ck_session_parent_class)->finalize (object); @@ -1119,13 +1121,13 @@ ck_session_new_with_parameters (const char *ssid, params = g_new0 (GParameter, n_allocated_params); n_params = 0; - params[n_params].name = "id"; + params[n_params].name = g_strdup ("id"); params[n_params].value.g_type = 0; g_value_init (¶ms[n_params].value, G_TYPE_STRING); g_value_set_string (¶ms[n_params].value, ssid); n_params++; - params[n_params].name = "cookie"; + params[n_params].name = g_strdup ("cookie"); params[n_params].value.g_type = 0; g_value_init (¶ms[n_params].value, G_TYPE_STRING); g_value_set_string (¶ms[n_params].value, cookie); @@ -1135,7 +1137,7 @@ ck_session_new_with_parameters (const char *ssid, for (i = 0; i < parameters->len; i++) { gboolean res; GValue val_struct = { 0, }; - const char *prop_name; + char *prop_name; GValue *prop_val; GParamSpec *pspec; @@ -1148,50 +1150,54 @@ ck_session_new_with_parameters (const char *ssid, G_MAXUINT); if (! res) { ck_debug ("Unable to extract parameter input"); - continue; + goto cont; } if (prop_name == NULL) { ck_debug ("Skipping NULL parameter"); - continue; + goto cont; } if (strcmp (prop_name, "id") == 0 || strcmp (prop_name, "cookie") == 0) { ck_debug ("Skipping restricted parameter: %s", prop_name); - continue; + goto cont; } pspec = g_object_class_find_property (class, prop_name); if (! pspec) { ck_debug ("Skipping unknown parameter: %s", prop_name); - if (prop_val != NULL) { - g_value_unset (prop_val); - } - continue; + goto cont; } if (!(pspec->flags & G_PARAM_WRITABLE)) { ck_debug ("property '%s' is not writable", pspec->name); - continue; + goto cont; } - params[n_params].name = prop_name; + params[n_params].name = g_strdup (prop_name); params[n_params].value.g_type = 0; g_value_init (¶ms[n_params].value, G_PARAM_SPEC_VALUE_TYPE (pspec)); res = g_value_transform (prop_val, ¶ms[n_params].value); if (! res) { ck_debug ("unable to transform property value for '%s'", pspec->name); - continue; + goto cont; } n_params++; + cont: + g_free (prop_name); + if (prop_val != NULL) { + g_value_unset (prop_val); + g_free (prop_val); + } } } object = g_object_newv (object_type, n_params, params); while (n_params--) { + g_free ((char *)params[n_params].name); g_value_unset (¶ms[n_params].value); } g_free (params); |