Re: 3.1.2 sensord duplicate RRD name problem

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Thu, 6 May 2010 14:20:56 +0200, Jean Delvare wrote:
> I have a patch ready, I'll give it some testing to make sure I got it
> right, and then I'll post it here.

Andre, can you please comment on the patch below? Sergey, any chance
you could test it? It works for me on two different machines, but I may
not have covered all possible cases.

---
 prog/sensord/rrd.c |   19 +++++++++++--------
 1 file changed, 11 insertions(+), 8 deletions(-)

--- lm-sensors.orig/prog/sensord/rrd.c	2009-11-05 10:18:11.000000000 +0100
+++ lm-sensors/prog/sensord/rrd.c	2010-05-06 17:54:06.000000000 +0200
@@ -137,9 +137,11 @@ static void rrdCheckLabel(const char *ra
 	}
 }
 
+/* Returns the number of features processed, or -1 on error */
 static int _applyToFeatures(FeatureFN fn, void *data,
 			    const sensors_chip_name *chip,
-			    const ChipDescriptor *desc)
+			    const ChipDescriptor *desc,
+			    int labelOffset)
 {
 	int i;
 	const FeatureDescriptor *features = desc->features;
@@ -147,7 +149,7 @@ static int _applyToFeatures(FeatureFN fn
 	const char *rawLabel;
 	char *label;
 
-	for (i = 0; i < MAX_RRD_SENSORS && features[i].format; ++i) {
+	for (i = 0; labelOffset + i < MAX_RRD_SENSORS && features[i].format; ++i) {
 		feature = features + i;
 		rawLabel = feature->feature->name;
 
@@ -158,11 +160,11 @@ static int _applyToFeatures(FeatureFN fn
 			return -1;
 		}
 
-		rrdCheckLabel(rawLabel, i);
-		fn(data, rrdLabels[i], label, feature);
+		rrdCheckLabel(rawLabel, labelOffset + i);
+		fn(data, rrdLabels[labelOffset + i], label, feature);
 		free(label);
 	}
-	return 0;
+	return i;
 }
 
 static ChipDescriptor *lookup_known_chips(const sensors_chip_name *chip)
@@ -184,7 +186,7 @@ static ChipDescriptor *lookup_known_chip
 
 static int applyToFeatures(FeatureFN fn, void *data)
 {
-	int i, i_detected, ret;
+	int i, i_detected, ret, labelOffset = 0;
 	const sensors_chip_name *chip, *chip_arg;
 	ChipDescriptor *desc;
 
@@ -197,9 +199,10 @@ static int applyToFeatures(FeatureFN fn,
 			if (!desc)
 				continue;
 
-			ret = _applyToFeatures(fn, data, chip, desc);
-			if (ret)
+			ret = _applyToFeatures(fn, data, chip, desc, labelOffset);
+			if (ret < 0)
 				return ret;
+			labelOffset += ret;
 		}
 	}
 	return 0;



-- 
Jean Delvare

_______________________________________________
lm-sensors mailing list
lm-sensors@xxxxxxxxxxxxxx
http://lists.lm-sensors.org/mailman/listinfo/lm-sensors

[Index of Archives]     [Linux Kernel]     [Linux Hardware Monitoring]     [Linux USB Devel]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [Yosemite Backpacking]

  Powered by Linux