mirror of
https://git.postgresql.org/git/postgresql.git
synced 2024-09-15 21:20:26 +02:00
931bf3eb9b
After removal, the next_sibling pointer of a node was sometimes incorrectly left to point to another node in the heap, which meant that a node was sometimes linked twice into the heap. Surprisingly that didn't cause any crashes in my testing, but it was clearly wrong and could easily segfault in other scenarios. Also always keep the prev_or_parent pointer as NULL on the root node. That was not a correctness issue AFAICS, but let's be tidy. Add a debugging function, to dump the contents of a pairing heap as a string. It's #ifdef'd out, as it's not used for anything in any normal code, but it was highly useful in debugging this. Let's keep it handy for further reference. |
||
---|---|---|
.. | ||
binaryheap.c | ||
hyperloglog.c | ||
ilist.c | ||
Makefile | ||
pairingheap.c | ||
rbtree.c | ||
README | ||
stringinfo.c |
This directory contains a general purpose data structures, for use anywhere in the backend: binaryheap.c - a binary heap hyperloglog.c - a streaming cardinality estimator pairingheap.c - a pairing heap rbtree.c - a red-black tree ilist.c - single and double-linked lists. stringinfo.c - an extensible string type Aside from the inherent characteristics of the data structures, there are a few practical differences between the binary heap and the pairing heap. The binary heap is fully allocated at creation, and cannot be expanded beyond the allocated size. The pairing heap on the other hand has no inherent maximum size, but the caller needs to allocate each element being stored in the heap, while the binary heap works with plain Datums or pointers. The linked-lists in ilist.c can be embedded directly into other structs, as opposed to the List interface in nodes/pg_list.h.