From 4c4fc5a965e2c06bf9c4d664b963ef62017233f6 Mon Sep 17 00:00:00 2001 From: Georges Basile Stavracas Neto Date: Wed, 19 Nov 2025 18:01:11 -0300 Subject: [PATCH] core/range-tree: Properly free nodes It was missing the GDateTime *max field. Part-of: --- src/core/gcal-range-tree.c | 44 ++++++++++++++++++++++---------------- 1 file changed, 25 insertions(+), 19 deletions(-) diff --git a/src/core/gcal-range-tree.c b/src/core/gcal-range-tree.c index 3fc66c2b..496c84ef 100644 --- a/src/core/gcal-range-tree.c +++ b/src/core/gcal-range-tree.c @@ -64,22 +64,6 @@ struct _GcalRangeTree G_DEFINE_BOXED_TYPE (GcalRangeTree, gcal_range_tree, gcal_range_tree_ref, gcal_range_tree_unref) /* Auxiliary methods */ -static void -destroy_tree (Node *n) -{ - if (!n) - return; - - destroy_tree (n->left); - destroy_tree (n->right); - - g_clear_pointer (&n->range, gcal_range_unref); - gcal_clear_date_time (&n->max); - - g_ptr_array_unref (n->data_array); - g_free (n); -} - static inline gint32 height (Node *n) { @@ -117,6 +101,30 @@ node_new (GcalRange *range, return n; } +static inline void +node_free (Node *n) +{ + if (n) + { + g_clear_pointer (&n->range, gcal_range_unref); + gcal_clear_date_time (&n->max); + g_ptr_array_unref (n->data_array); + g_free (n); + } +} + +static void +destroy_tree (Node *n) +{ + if (!n) + return; + + destroy_tree (n->left); + destroy_tree (n->right); + + node_free (n); +} + /* AVL rotations */ static Node* rotate_left (Node *n) @@ -254,9 +262,7 @@ delete_node (Node *n, left = n->left; right = n->right; - g_clear_pointer (&n->range, gcal_range_unref); - g_ptr_array_unref (n->data_array); - g_free (n); + node_free (n); if (!right) return left;