From d5bead602534bcb59a09debf4f6546915219ca52 Mon Sep 17 00:00:00 2001 From: Jean Delvare Date: Sun, 15 Feb 2009 17:18:01 +0000 Subject: [PATCH] Free bus statements from the configuration file as soon as we are done with them. git-svn-id: http://lm-sensors.org/svn/lm-sensors/trunk@5645 7894878c-1315-0410-8ee3-d5d059ff63e0 --- CHANGES | 1 + lib/init.c | 47 +++++++++++++++++++++++++++++------------------ 2 files changed, 30 insertions(+), 18 deletions(-) diff --git a/CHANGES b/CHANGES index 3cd15592..51dbac75 100644 --- a/CHANGES +++ b/CHANGES @@ -11,6 +11,7 @@ SVN-HEAD Fix memory leak in scanner when using flex 2.5.9 or later Report configuration file read errors Exit the configuration file parser sooner + Free bus statements from the configuration file sooner lm_sensors.init: Support new format of /etc/sysconfig/lm_sensors (#2246) Drop support for kernels 2.4 and earlier lm_sensors.init.suse: Delete (actual SuSE script is much different) diff --git a/lib/init.c b/lib/init.c index 060d045d..71af5aff 100644 --- a/lib/init.c +++ b/lib/init.c @@ -61,18 +61,42 @@ static int sensors_parse(void) return res; } +static void free_bus(sensors_bus *bus) +{ + free(bus->adapter); +} + +static void free_config_busses(void) +{ + int i; + + for (i = 0; i < sensors_config_busses_count; i++) + free_bus(&sensors_config_busses[i]); + free(sensors_config_busses); + sensors_config_busses = NULL; + sensors_config_busses_count = sensors_config_busses_max = 0; +} + static int parse_config(FILE *input) { int err; - if (sensors_scanner_init(input)) - return -SENSORS_ERR_PARSE; + if (sensors_scanner_init(input)) { + err = -SENSORS_ERR_PARSE; + goto exit_cleanup; + } err = sensors_parse(); sensors_scanner_exit(); - if (err) - return -SENSORS_ERR_PARSE; + if (err) { + err = -SENSORS_ERR_PARSE; + goto exit_cleanup; + } - return 0; + err = sensors_substitute_busses(); + +exit_cleanup: + free_config_busses(); + return err; } int sensors_init(FILE *input) @@ -107,8 +131,6 @@ int sensors_init(FILE *input) } } - if ((res = sensors_substitute_busses())) - goto exit_cleanup; return 0; exit_cleanup: @@ -134,11 +156,6 @@ static void free_chip_features(sensors_chip_features *features) free(features->feature); } -static void free_bus(sensors_bus *bus) -{ - free(bus->adapter); -} - static void free_label(sensors_label *label) { free(label->name); @@ -218,12 +235,6 @@ void sensors_cleanup(void) sensors_proc_chips = NULL; sensors_proc_chips_count = sensors_proc_chips_max = 0; - for (i = 0; i < sensors_config_busses_count; i++) - free_bus(&sensors_config_busses[i]); - free(sensors_config_busses); - sensors_config_busses = NULL; - sensors_config_busses_count = sensors_config_busses_max = 0; - for (i = 0; i < sensors_config_chips_count; i++) free_chip(&sensors_config_chips[i]); free(sensors_config_chips);