summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorWilliam Jon McCann <mccann@jhu.edu>2007-03-13 11:41:31 -0400
committerWilliam Jon McCann <mccann@jhu.edu>2007-03-13 11:41:31 -0400
commit4a639d92a6f1a5dd8f59d57ade37d4cff420b66a (patch)
treecb6081df5fd92f3b3edd28d884e887fb4cc49424
parent1e7af7e9c648fb461e0d36d037d2920519159525 (diff)
various leak fixes
-rw-r--r--src/ck-manager.c38
-rw-r--r--src/ck-seat.c15
-rw-r--r--src/ck-session.c32
-rw-r--r--src/main.c4
4 files changed, 68 insertions, 21 deletions
diff --git a/src/ck-manager.c b/src/ck-manager.c
index 9b51000..8e66419 100644
--- a/src/ck-manager.c
+++ b/src/ck-manager.c
@@ -375,6 +375,11 @@ find_seat_for_session (CkManager *manager,
g_free (sid);
}
+ g_free (display_device);
+ g_free (x11_display_device);
+ g_free (x11_display);
+ g_free (remote_host_name);
+
return seat;
}
@@ -627,6 +632,8 @@ add_param_int (GPtrArray *parameters,
0, key,
1, &val,
G_MAXUINT);
+ g_value_unset (&val);
+
g_ptr_array_add (parameters, g_value_get_boxed (&param_val));
}
@@ -654,6 +661,8 @@ add_param_boolean (GPtrArray *parameters,
0, key,
1, &val,
G_MAXUINT);
+ g_value_unset (&val);
+
g_ptr_array_add (parameters, g_value_get_boxed (&param_val));
}
@@ -676,6 +685,8 @@ add_param_string (GPtrArray *parameters,
0, key,
1, &val,
G_MAXUINT);
+ g_value_unset (&val);
+
g_ptr_array_add (parameters, g_value_get_boxed (&param_val));
}
@@ -716,6 +727,7 @@ parse_output (const char *output)
vals = g_strsplit (lines[i], " = ", 2);
if (vals == NULL || vals[0] == NULL) {
+ g_strfreev (vals);
continue;
}
@@ -728,6 +740,8 @@ parse_output (const char *output)
g_strfreev (vals);
}
+ g_strfreev (lines);
+
return parameters;
}
@@ -745,6 +759,22 @@ job_data_free (JobData *data)
}
static void
+parameters_free (GPtrArray *parameters)
+{
+ int i;
+
+ for (i = 0; i < parameters->len; i++) {
+ gpointer data;
+ data = g_ptr_array_index (parameters, i);
+ if (data != NULL) {
+ g_boxed_free (CK_TYPE_PARAMETER_STRUCT, data);
+ }
+ }
+
+ g_ptr_array_free (parameters, TRUE);
+}
+
+static void
job_completed (CkJob *job,
int status,
JobData *data)
@@ -765,9 +795,7 @@ job_completed (CkJob *job,
data->leader_info,
parameters,
data->context);
-
- g_ptr_array_free (parameters, TRUE);
-
+ parameters_free (parameters);
}
/* remove job from queue */
@@ -886,6 +914,9 @@ create_session_for_sender (CkManager *manager,
context);
}
+ g_free (cookie);
+ g_free (ssid);
+
return TRUE;
}
@@ -1192,6 +1223,7 @@ remove_session_for_cookie (CkManager *manager,
g_hash_table_remove (manager->priv->sessions, ssid);
+ g_free (sid);
g_free (ssid);
manager_update_system_idle_hint (manager);
diff --git a/src/ck-seat.c b/src/ck-seat.c
index c980ad5..0b8ef80 100644
--- a/src/ck-seat.c
+++ b/src/ck-seat.c
@@ -527,10 +527,12 @@ ck_seat_remove_session (CkSeat *seat,
CkSession *session,
GError **error)
{
- char *ssid;
+ char *ssid;
+ gboolean ret;
g_return_val_if_fail (CK_IS_SEAT (seat), FALSE);
+ ret = FALSE;
ssid = NULL;
ck_session_get_id (session, &ssid, NULL);
@@ -540,8 +542,7 @@ ck_seat_remove_session (CkSeat *seat,
CK_SEAT_ERROR,
CK_SEAT_ERROR_GENERAL,
_("Session is not attached to this seat"));
- g_free (ssid);
- return FALSE;
+ goto out;
}
g_signal_handlers_disconnect_by_func (session, session_activate, seat);
@@ -555,7 +556,11 @@ ck_seat_remove_session (CkSeat *seat,
/* try to change the active session */
maybe_update_active_session (seat);
- return TRUE;
+ ret = TRUE;
+ out:
+ g_free (ssid);
+
+ return ret;
}
gboolean
@@ -582,6 +587,8 @@ ck_seat_add_session (CkSeat *seat,
maybe_update_active_session (seat);
+ g_free (ssid);
+
return TRUE;
}
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 (&params[n_params].value, G_TYPE_STRING);
g_value_set_string (&params[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 (&params[n_params].value, G_TYPE_STRING);
g_value_set_string (&params[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 (&params[n_params].value, G_PARAM_SPEC_VALUE_TYPE (pspec));
res = g_value_transform (prop_val, &params[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 (&params[n_params].value);
}
g_free (params);
diff --git a/src/main.c b/src/main.c
index 3035b31..446b291 100644
--- a/src/main.c
+++ b/src/main.c
@@ -285,13 +285,15 @@ main (int argc,
loop = g_main_loop_new (NULL, FALSE);
if (do_timed_exit) {
- g_timeout_add (3000 * 60, (GSourceFunc) timed_exit_cb, loop);
+ g_timeout_add (1000 * 30, (GSourceFunc) timed_exit_cb, loop);
}
g_main_loop_run (loop);
g_object_unref (manager);
+ g_main_loop_unref (loop);
+
ret = 0;
out: