From 5fd86cc3febf71d17bfe9631ffbeccbd888495bf Mon Sep 17 00:00:00 2001 From: Patrick McDermott Date: Wed, 25 Oct 2017 11:19:48 -0400 Subject: mq_tree_remove*(): Fix parent and sibling links --- diff --git a/src/tree.c b/src/tree.c index ec5e72a..9d547b3 100644 --- a/src/tree.c +++ b/src/tree.c @@ -190,16 +190,24 @@ mq_tree_remove_allocated(MqTree *node) { MqTree *child; - /* Link siblings and/or parent to children (may be NULL). */ + /* Link siblings to children or each other. */ if (node->prev) { - node->prev->next = node->first_child; - } else { - node->parent->first_child = node->first_child; + node->prev->next = node->first_child ? + node->first_child : node->next; } if (node->next) { - node->next->prev = node->last_child; - } else { - node->parent->last_child = node->last_child; + node->next->prev = node->last_child ? + node->last_child : node->prev; + } + + /* Update parent's links. */ + if (node->parent->first_child == node) { + node->parent->first_child = node->first_child ? + node->first_child : node->next; + } + if (node->parent->last_child == node) { + node->parent->last_child = node->last_child ? + node->last_child : node->prev; } /* Link children to siblings (may be NULL). */ -- cgit v0.9.1