diff --git a/src/backend/config_lookup.c b/src/backend/config_lookup.c index 12f8ae023..96c62c880 100644 --- a/src/backend/config_lookup.c +++ b/src/backend/config_lookup.c @@ -116,7 +116,7 @@ lumiera_config_lookup_remove (LumieraConfigLookup self, LumieraConfigitem item) /* last item in lookup, remove it from the splay tree */ LumieraConfigLookupentry entry = LLIST_TO_STRUCTP (llist_next (&item->lookup), lumiera_config_lookupentry, configitems); llist_unlink (&item->lookup); - psplay_remove (&self->tree, (PSplaynode)entry); + psplay_delete_node (&self->tree, (PSplaynode)entry); } else { diff --git a/src/backend/configitem.c b/src/backend/configitem.c index 917676251..6252b0bcf 100644 --- a/src/backend/configitem.c +++ b/src/backend/configitem.c @@ -74,17 +74,17 @@ lumiera_configitem_destroy (LumieraConfigitem self, LumieraConfigLookup lookup) if (self) { + LLIST_WHILE_HEAD (&self->childs, node) + lumiera_configitem_delete ((LumieraConfigitem) node, lookup); + + ENSURE (llist_is_empty (&self->childs), "destructor didn't remove childs"); + if (self->vtable && self->vtable->destroy) self->vtable->destroy (self); if (!llist_is_empty (&self->lookup)) lumiera_config_lookup_remove (lookup, self); - LLIST_WHILE_HEAD (&self->childs, node) - lumiera_configitem_delete ((LumieraConfigitem) node, lookup); - - ENSURE (llist_is_empty (&self->childs), "destructor didn't remove childs"); - llist_unlink (&self->link); lumiera_free (self->line); }