diff --git a/CHANGES b/CHANGES index 8981e693..b25a67fb 100644 --- a/CHANGES +++ b/CHANGES @@ -4,6 +4,7 @@ lm-sensors CHANGES file SVN HEAD libsensors: Added support for new sysfs attributes Change sysfs detection to survive upcoming kernel changes + sensord: Fix memory leaks revealed by valgrind sensors: Added support for new sysfs attributes Display both instantaneous and average power if available. Report thermal sensor type 1 as CPU diode diff --git a/prog/sensord/sense.c b/prog/sensord/sense.c index ed9b13b0..f3765320 100644 --- a/prog/sensord/sense.c +++ b/prog/sensord/sense.c @@ -132,14 +132,7 @@ static int do_features(const sensors_chip_name *chip, const FeatureDescriptor *feature, int action) { char *label; - int alrm, beep; - - label = sensors_get_label(chip, feature->feature); - if (!label) { - sensorLog(LOG_ERR, "Error getting sensor label: %s/%s", - chip->prefix, feature->feature->name); - return -1; - } + int alrm, beep, ret; alrm = get_flag(chip, feature->alarmNumber); if (alrm == -1) @@ -151,7 +144,18 @@ static int do_features(const sensors_chip_name *chip, if (beep == -1) return -1; - return get_features(chip, feature, action, label, alrm, beep); + label = sensors_get_label(chip, feature->feature); + if (!label) { + sensorLog(LOG_ERR, "Error getting sensor label: %s/%s", + chip->prefix, feature->feature->name); + return -1; + } + + ret = get_features(chip, feature, action, label, alrm, beep); + + free(label); + + return ret; } static int doKnownChip(const sensors_chip_name *chip, diff --git a/prog/sensord/sensord.c b/prog/sensord/sensord.c index 8b75cad8..a3f0ec0e 100644 --- a/prog/sensord/sensord.c +++ b/prog/sensord/sensord.c @@ -204,7 +204,11 @@ static void daemonize(void) } else if (pid != 0) { fprintf(file, "%d\n", pid); fclose(file); - unloadLib(); + + freeChips(); + if (unloadLib()) + exit(EXIT_FAILURE); + exit(EXIT_SUCCESS); }