From 3d39da9330f7bb44c82cbd7ecb1d529cc99b0d10 Mon Sep 17 00:00:00 2001 From: Sebastian Reichel Date: Sat, 12 Sep 2015 04:32:45 +0200 Subject: [PATCH] correctly free battery linked list --- src/battery/linux.c | 49 ++++++++++++++++++--------------------------- 1 file changed, 20 insertions(+), 29 deletions(-) diff --git a/src/battery/linux.c b/src/battery/linux.c index 91c870f..89989d5 100644 --- a/src/battery/linux.c +++ b/src/battery/linux.c @@ -193,40 +193,31 @@ static gboolean init_linux_mains(struct psy_mains *ac) { return TRUE; } -void battery_os_free() { - GList *l = batteries; +static void psy_battery_free(gpointer data) { + struct psy_battery *bat = data; + g_free(bat->name); + g_free(bat->path_status); + g_free(bat->path_power_now); + g_free(bat->path_energy_full); + g_free(bat->path_energy_now); + g_free(bat->path_present); + g_free(bat); +} +static void psy_mains_free(gpointer data) { + struct psy_mains *ac = data; + g_free(ac->name); + g_free(ac->path_online); + g_free(ac); +} + +void battery_os_free() { uevent_unregister_notifier(&psy_change); uevent_unregister_notifier(&psy_plug); - while (l != NULL) { - GList *next = l->next; - struct psy_battery *bat = l->data; - - g_free(bat->name); - g_free(bat->path_status); - g_free(bat->path_power_now); - g_free(bat->path_energy_full); - g_free(bat->path_energy_now); - g_free(bat->path_present); - - batteries = g_list_delete_link(batteries, l); - l = next; - } - - l = mains; - while (l != NULL) { - GList *next = l->next; - struct psy_mains *ac = l->data; - - g_free(ac->name); - g_free(ac->path_online); - - mains = g_list_delete_link(mains, l); - l = next; - } - + g_list_free_full(batteries, psy_battery_free); batteries = NULL; + g_list_free_full(mains, psy_mains_free); mains = NULL; }