summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRobert Ancell <robert.ancell@canonical.com>2014-03-07 14:13:27 +1300
committerRobert Ancell <robert.ancell@canonical.com>2014-03-07 14:13:27 +1300
commit36c84a46cba37bd34ade2c80d3cac7a03c5fb86c (patch)
tree686e1ab27b7ab6698085c0d1d29485e0d350af88
parent9f3b892ffec5725f9315cb38d4009a302a9e3e40 (diff)
downloadlightdm-git-36c84a46cba37bd34ade2c80d3cac7a03c5fb86c.tar.gz
Fix small leaks detected by valgrind
-rw-r--r--liblightdm-gobject/user.c4
-rw-r--r--src/configuration.c13
-rw-r--r--src/display-server.c15
-rw-r--r--src/dmrc.c4
-rw-r--r--src/session.c2
-rw-r--r--src/x-server-local.c12
6 files changed, 43 insertions, 7 deletions
diff --git a/liblightdm-gobject/user.c b/liblightdm-gobject/user.c
index 3983f18d..d1edc460 100644
--- a/liblightdm-gobject/user.c
+++ b/liblightdm-gobject/user.c
@@ -1506,9 +1506,11 @@ lightdm_user_finalize (GObject *object)
g_free (priv->home_directory);
g_free (priv->image);
g_free (priv->background);
- g_strfreev (priv->layouts);
if (priv->dmrc_file)
g_key_file_free (priv->dmrc_file);
+ g_free (priv->language);
+ g_strfreev (priv->layouts);
+ g_free (priv->session);
}
static void
diff --git a/src/configuration.c b/src/configuration.c
index e3b15df8..52be58d0 100644
--- a/src/configuration.c
+++ b/src/configuration.c
@@ -37,7 +37,10 @@ config_load_from_file (Configuration *config, const gchar *path, GError **error)
key_file = g_key_file_new ();
if (!g_key_file_load_from_file (key_file, path, G_KEY_FILE_NONE, error))
+ {
+ g_key_file_free (key_file);
return FALSE;
+ }
groups = g_key_file_get_groups (key_file, NULL);
for (i = 0; groups[i]; i++)
@@ -50,12 +53,20 @@ config_load_from_file (Configuration *config, const gchar *path, GError **error)
break;
for (j = 0; keys[j]; j++)
- g_key_file_set_value (config->priv->key_file, groups[i], keys[j], g_key_file_get_value (key_file, groups[i], keys[j], NULL));
+ {
+ gchar *value;
+
+ value = g_key_file_get_value (key_file, groups[i], keys[j], NULL);
+ g_key_file_set_value (config->priv->key_file, groups[i], keys[j], value);
+ g_free (value);
+ }
g_strfreev (keys);
}
g_strfreev (groups);
+ g_key_file_free (key_file);
+
return TRUE;
}
diff --git a/src/display-server.c b/src/display-server.c
index cd9673b6..ddc476e2 100644
--- a/src/display-server.c
+++ b/src/display-server.c
@@ -152,14 +152,29 @@ display_server_init (DisplayServer *server)
}
static void
+display_server_finalize (GObject *object)
+{
+ DisplayServer *self;
+
+ self = DISPLAY_SERVER (object);
+
+ g_free (self->priv->name);
+
+ G_OBJECT_CLASS (display_server_parent_class)->finalize (object);
+}
+
+static void
display_server_class_init (DisplayServerClass *klass)
{
+ GObjectClass *object_class = G_OBJECT_CLASS (klass);
+
klass->get_can_share = display_server_real_get_can_share;
klass->get_vt = display_server_real_get_vt;
klass->start = display_server_real_start;
klass->connect_session = display_server_real_connect_session;
klass->disconnect_session = display_server_real_disconnect_session;
klass->stop = display_server_real_stop;
+ object_class->finalize = display_server_finalize;
g_type_class_add_private (klass, sizeof (DisplayServerPrivate));
diff --git a/src/dmrc.c b/src/dmrc.c
index ccde1bf1..3e17a626 100644
--- a/src/dmrc.c
+++ b/src/dmrc.c
@@ -107,6 +107,7 @@ dmrc_save (GKeyFile *dmrc_file, const gchar *username)
/* Update the .dmrc cache */
cache_dir = config_get_string (config_get_instance (), "LightDM", "cache-directory");
dmrc_cache_dir = g_build_filename (cache_dir, "dmrc", NULL);
+ g_free (cache_dir);
if (g_mkdir_with_parents (dmrc_cache_dir, 0700) < 0)
g_warning ("Failed to make DMRC cache directory %s: %s", dmrc_cache_dir, strerror (errno));
@@ -114,8 +115,9 @@ dmrc_save (GKeyFile *dmrc_file, const gchar *username)
path = g_build_filename (dmrc_cache_dir, filename, NULL);
g_file_set_contents (path, data, length, NULL);
- g_free (dmrc_cache_dir);
+ g_free (data);
g_free (path);
g_free (filename);
+ g_free (dmrc_cache_dir);
g_object_unref (user);
}
diff --git a/src/session.c b/src/session.c
index 9b985b72..8119a578 100644
--- a/src/session.c
+++ b/src/session.c
@@ -303,7 +303,7 @@ session_unset_env (Session *session, const gchar *name)
return;
g_free (link->data);
- session->priv->env = g_list_remove_link (session->priv->env, link);
+ session->priv->env = g_list_delete_link (session->priv->env, link);
}
void
diff --git a/src/x-server-local.c b/src/x-server-local.c
index efe1227e..2c925c7b 100644
--- a/src/x-server-local.c
+++ b/src/x-server-local.c
@@ -140,7 +140,7 @@ x_server_local_release_display_number (guint display_number)
guint number = GPOINTER_TO_UINT (link->data);
if (number == display_number)
{
- display_numbers = g_list_remove_link (display_numbers, link);
+ display_numbers = g_list_delete_link (display_numbers, link);
return;
}
}
@@ -149,15 +149,20 @@ x_server_local_release_display_number (guint display_number)
XServerLocal *
x_server_local_new (void)
{
- XServerLocal *self = g_object_new (X_SERVER_LOCAL_TYPE, NULL);
+ XServerLocal *self;
gchar hostname[1024], *number, *name;
+ XAuthority *cookie;
+
+ self = g_object_new (X_SERVER_LOCAL_TYPE, NULL);
x_server_set_display_number (X_SERVER (self), x_server_local_get_unused_display_number ());
gethostname (hostname, 1024);
number = g_strdup_printf ("%d", x_server_get_display_number (X_SERVER (self)));
- x_server_set_authority (X_SERVER (self), x_authority_new_cookie (XAUTH_FAMILY_LOCAL, (guint8*) hostname, strlen (hostname), number));
+ cookie = x_authority_new_cookie (XAUTH_FAMILY_LOCAL, (guint8*) hostname, strlen (hostname), number);
+ x_server_set_authority (X_SERVER (self), cookie);
g_free (number);
+ g_object_unref (cookie);
name = g_strdup_printf ("x-%d", x_server_get_display_number (X_SERVER (self)));
display_server_set_name (DISPLAY_SERVER (self), name);
@@ -581,6 +586,7 @@ x_server_local_finalize (GObject *object)
g_free (self->priv->command);
g_free (self->priv->config_file);
g_free (self->priv->layout);
+ g_free (self->priv->xdg_seat);
g_free (self->priv->xdmcp_server);
g_free (self->priv->xdmcp_key);
g_free (self->priv->mir_id);