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)
|
G_DEFINE_BOXED_TYPE (GcalRangeTree, gcal_range_tree, gcal_range_tree_ref, gcal_range_tree_unref)
|
||||||
|
|
||||||
/* Auxiliary methods */
|
/* 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
|
static inline gint32
|
||||||
height (Node *n)
|
height (Node *n)
|
||||||
{
|
{
|
||||||
@@ -117,6 +101,30 @@ node_new (GcalRange *range,
|
|||||||
return n;
|
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 */
|
/* AVL rotations */
|
||||||
static Node*
|
static Node*
|
||||||
rotate_left (Node *n)
|
rotate_left (Node *n)
|
||||||
@@ -254,9 +262,7 @@ delete_node (Node *n,
|
|||||||
left = n->left;
|
left = n->left;
|
||||||
right = n->right;
|
right = n->right;
|
||||||
|
|
||||||
g_clear_pointer (&n->range, gcal_range_unref);
|
node_free (n);
|
||||||
g_ptr_array_unref (n->data_array);
|
|
||||||
g_free (n);
|
|
||||||
|
|
||||||
if (!right)
|
if (!right)
|
||||||
return left;
|
return left;
|
||||||
|
|||||||
Reference in New Issue
Block a user