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:
+25
-19
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user