@@ -680,6 +680,22 @@ void coroutine_fn qcow2_co_load_dedup_hashes(void *opaque)
}
/*
+ * This function walk in the red black tree remove the elements and free them.
+ */
+void qcow2_dedup_destroy_rb_tree(BlockDriverState *bs)
+{
+ BDRVQcowState *s = bs->opaque;
+
+ while (!RB_EMPTY_ROOT(&s->dedup_rb_tree)) {
+ QCowHashNode *data =
+ rb_entry(s->dedup_rb_tree.rb_node, QCowHashNode, node);
+ rb_erase(&data->node, &s->dedup_rb_tree);
+ g_free(data->hash);
+ g_free(data);
+ }
+}
+
+/*
* Save the dedup table information into the header extensions
*
* @table_offset: the dedup table offset in the QCOW2 file
@@ -390,6 +390,7 @@ int qcow2_dedup_write_new_hashes(BlockDriverState *bs,
int count);
void coroutine_fn qcow2_co_load_dedup_hashes(void *opaque);
void qcow2_dedup_start_loading_hashes(BlockDriverState *bs);
+void qcow2_dedup_destroy_rb_tree(BlockDriverState *bs);
int qcow2_dedup_grow_table(BlockDriverState *bs,
int min_size,
bool exact_size);