diff options
author | Robert Ancell <robert.ancell@canonical.com> | 2014-03-07 14:13:27 +1300 |
---|---|---|
committer | Robert Ancell <robert.ancell@canonical.com> | 2014-03-07 14:13:27 +1300 |
commit | 36c84a46cba37bd34ade2c80d3cac7a03c5fb86c (patch) | |
tree | 686e1ab27b7ab6698085c0d1d29485e0d350af88 | |
parent | 9f3b892ffec5725f9315cb38d4009a302a9e3e40 (diff) | |
download | lightdm-git-36c84a46cba37bd34ade2c80d3cac7a03c5fb86c.tar.gz |
Fix small leaks detected by valgrind
-rw-r--r-- | liblightdm-gobject/user.c | 4 | ||||
-rw-r--r-- | src/configuration.c | 13 | ||||
-rw-r--r-- | src/display-server.c | 15 | ||||
-rw-r--r-- | src/dmrc.c | 4 | ||||
-rw-r--r-- | src/session.c | 2 | ||||
-rw-r--r-- | src/x-server-local.c | 12 |
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)); @@ -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); |