]> git.ipfire.org Git - thirdparty/collectd.git/commitdiff
fix memory leak in subtract function
authorSvetlana Shmidt <sshmidt@google.com>
Tue, 8 Sep 2020 11:38:31 +0000 (11:38 +0000)
committerSvetlana Shmidt <sshmidt@google.com>
Tue, 8 Sep 2020 11:38:31 +0000 (11:38 +0000)
src/daemon/distribution.c

index 51cfeafd1f9eb77b5594e8603a4930d6f0ebeb44..e73b2afa805d1d392e383df6f8c517fe4ae7345e 100644 (file)
@@ -417,3 +417,39 @@ int distribution_sub(distribution_t *d1, distribution_t *d2) {
   free(cmp_status);
   return 0;
 }
+
+/*int distribution_sub(distribution_t *d1, distribution_t *d2) {
+  if (d1 == NULL || d2 == NULL) {
+    return errno = EINVAL;
+  }
+
+  if (d1->num_buckets != d2->num_buckets) {
+    return errno = EINVAL;
+  }
+
+  pthread_mutex_lock(&d1->mutex);
+  pthread_mutex_lock(&d2->mutex);
+
+  if (d1->total_sum < d2->total_sum) {
+    pthread_mutex_unlock(&d1->mutex);
+    pthread_mutex_unlock(&d2->mutex);
+    return ERANGE;
+  } else {
+    d1->total_sum -= d2->total_sum;
+    for (size_t i = 0; i < tree_size(d1->num_buckets); ++i) {
+      if (d1->tree[i].maximum != d2->tree[i].maximum ||
+          d1->tree[i].bucket_counter < d2->tree[i].bucket_counter) {
+        pthread_mutex_unlock(&d2->mutex);
+        pthread_mutex_unlock(&d1->mutex);
+        return errno = EINVAL;
+      }
+
+      d1->tree[i].bucket_counter -= d2->tree[i].bucket_counter;
+    }
+  }
+
+  pthread_mutex_unlock(&d2->mutex);
+  pthread_mutex_unlock(&d1->mutex);
+
+  return 0;
+}*/