From 36601bf4f6583d8a3f6131f16e456bf006ec7bbd Mon Sep 17 00:00:00 2001 From: Sebastian Harl Date: Wed, 8 Sep 2010 22:37:45 +0200 Subject: [PATCH] patches: Added bts596128-reheap-fix. This is an upstream patch fixing the 'reheap()' function used to manage the "read" callbacks and making sure all plugins get executed correctly and in each interval. Closes: #596128 --- debian/changelog | 5 ++- debian/patches/00list | 1 + debian/patches/bts596128-reheap-fix.dpatch | 46 ++++++++++++++++++++++ 3 files changed, 51 insertions(+), 1 deletion(-) create mode 100755 debian/patches/bts596128-reheap-fix.dpatch diff --git a/debian/changelog b/debian/changelog index c220dd8..42d43bb 100644 --- a/debian/changelog +++ b/debian/changelog @@ -7,8 +7,11 @@ collectd (4.10.1-2) unstable; urgency=low - Added bts592623-curl_json-file -- upstream patch fixing access to file:// URLs in the 'curl_json' plugin; thanks Baptiste Mille-Mathias for reporting this and pointing out the patch (Closes: #592623). + - Added bts596128-reheap-fix -- upstream patch fixing the 'reheap()' + function used to manage the "read" callbacks and making sure all plugins + get executed correctly and in each interval (Closes: #596128). - -- Sebastian Harl Wed, 08 Sep 2010 22:25:05 +0200 + -- Sebastian Harl Wed, 08 Sep 2010 22:35:38 +0200 collectd (4.10.1-1) unstable; urgency=low diff --git a/debian/patches/00list b/debian/patches/00list index e186cd0..e7a35f8 100644 --- a/debian/patches/00list +++ b/debian/patches/00list @@ -3,4 +3,5 @@ collection_conf_path.dpatch bts559801_plugin_find_fix.dpatch bts595756-notify_email-segfault.dpatch bts592623-curl_json-file.dpatch +bts596128-reheap-fix.dpatch diff --git a/debian/patches/bts596128-reheap-fix.dpatch b/debian/patches/bts596128-reheap-fix.dpatch new file mode 100755 index 0000000..8a4dd9d --- /dev/null +++ b/debian/patches/bts596128-reheap-fix.dpatch @@ -0,0 +1,46 @@ +#! /bin/sh /usr/share/dpatch/dpatch-run +## bts596128-reheap-fix.dpatch by Florian Forster +## +## DP: src/utils_heap.c: Fix calculation of the parent's index. +## DP: +## DP: This resulted in the "upwards" reheap function to return prematurely, +## DP: leaving the heap condition violated. + +@DPATCH@ + +diff a/src/utils_heap.c b/src/utils_heap.c +--- a/src/utils_heap.c ++++ b/src/utils_heap.c +@@ -96,7 +96,7 @@ static void reheap (c_heap_t *h, size_t root, enum reheap_direction dir) + return; + + if (dir == DIR_UP) +- reheap (h, root / 2, dir); ++ reheap (h, (root - 1) / 2, dir); + else if (dir == DIR_DOWN) + reheap (h, min, dir); + } /* void reheap */ +@@ -140,6 +140,8 @@ void c_heap_destroy (c_heap_t *h) + + int c_heap_insert (c_heap_t *h, void *ptr) + { ++ size_t index; ++ + if ((h == NULL) || (ptr == NULL)) + return (-EINVAL); + +@@ -162,11 +164,12 @@ int c_heap_insert (c_heap_t *h, void *ptr) + } + + /* Insert the new node as a leaf. */ +- h->list[h->list_len] = ptr; ++ index = h->list_len; ++ h->list[index] = ptr; + h->list_len++; + + /* Reorganize the heap from bottom up. */ +- reheap (h, /* parent of this node = */ (h->list_len - 1) / 2, DIR_UP); ++ reheap (h, /* parent of this node = */ (index - 1) / 2, DIR_UP); + + pthread_mutex_unlock (&h->lock); + return (0); -- 2.30.2