X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;f=src%2Futils_heap.c;h=f8f7405870845ecab721762167173a06ffed8986;hb=HEAD;hp=1ecd07e82abb8dd66ed787413c0b2d572192eb75;hpb=79367f94108a13a62f1ad3ef9d1045c5401e82c4;p=collectd.git diff --git a/src/utils_heap.c b/src/utils_heap.c index 1ecd07e8..f8f74058 100644 --- 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,17 +164,18 @@ 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); } /* int c_heap_insert */ -void *c_head_get_root (c_heap_t *h) +void *c_heap_get_root (c_heap_t *h) { void *ret = NULL; @@ -218,6 +221,6 @@ void *c_head_get_root (c_heap_t *h) pthread_mutex_unlock (&h->lock); return (ret); -} /* void *c_head_get_root */ +} /* void *c_heap_get_root */ /* vim: set sw=2 sts=2 et fdm=marker : */