From 3c542fd046b3d609c90e643bfedfd4fcaf9c4f68 Mon Sep 17 00:00:00 2001 From: Pavel Vasin Date: Sat, 3 Aug 2013 12:11:45 +0400 Subject: [PATCH 2/2] daemon: Don't leak struct UserPreviousLogin --- src/daemon.c | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/src/daemon.c b/src/daemon.c index 81dcbde..f85050a 100644 --- a/src/daemon.c +++ b/src/daemon.c @@ -256,6 +256,13 @@ typedef struct { GHashTable *logout_hash; } WTmpGeneratorState; +static void +user_previous_login_free (UserPreviousLogin *previous_login) +{ + g_free (previous_login->id); + g_free (previous_login); +} + static struct passwd * entry_generator_wtmp (GHashTable *users, gpointer *state) @@ -365,11 +372,7 @@ entry_generator_wtmp (GHashTable *users, user = g_hash_table_lookup (users, key); if (user == NULL) { - for (l = accounting->previous_logins; l != NULL; l = l->next) { - previous_login = l->data; - g_free (previous_login->id); - } - g_list_free (accounting->previous_logins); + g_list_free_full (accounting->previous_logins, (GDestroyNotify) user_previous_login_free); continue; } @@ -384,11 +387,10 @@ entry_generator_wtmp (GHashTable *users, g_variant_builder_add (builder2, "{sv}", "type", g_variant_new_string (previous_login->id)); g_variant_builder_add (builder, "(xxa{sv})", previous_login->login_time, previous_login->logout_time, builder2); g_variant_builder_unref (builder2); - g_free (previous_login->id); } g_object_set (user, "login-history", g_variant_new ("a(xxa{sv})", builder), NULL); g_variant_builder_unref (builder); - g_list_free (accounting->previous_logins); + g_list_free_full (accounting->previous_logins, (GDestroyNotify) user_previous_login_free); user_changed (user); } -- 1.8.3.4