core/range-tree: Properly free nodes

It was missing the GDateTime *max field.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/664>
This commit is contained in:
Georges Basile Stavracas Neto
2025-11-19 18:01:11 -03:00
parent 13dc2ff3be
commit 4c4fc5a965
+25 -19
View File
@@ -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;