@@ -4815,32 +4815,6 @@ static void bdrv_delete(BlockDriverState *bs)
bdrv_unref_child(bs, child);
}
- assert(!bs->backing);
- assert(!bs->file);
- g_free(bs->opaque);
- bs->opaque = NULL;
- qatomic_set(&bs->copy_on_read, 0);
- bs->backing_file[0] = '\0';
- bs->backing_format[0] = '\0';
- bs->total_sectors = 0;
- bs->encrypted = false;
- bs->sg = false;
- qobject_unref(bs->options);
- qobject_unref(bs->explicit_options);
- bs->options = NULL;
- bs->explicit_options = NULL;
- qobject_unref(bs->full_open_options);
- bs->full_open_options = NULL;
- g_free(bs->block_status_cache);
- bs->block_status_cache = NULL;
-
- bdrv_release_named_dirty_bitmaps(bs);
- assert(QLIST_EMPTY(&bs->dirty_bitmaps));
-
- QLIST_FOREACH_SAFE(ban, &bs->aio_notifiers, list, ban_next) {
- g_free(ban);
- }
- QLIST_INIT(&bs->aio_notifiers);
bdrv_drained_end(bs);
/*
@@ -4852,6 +4826,20 @@ static void bdrv_delete(BlockDriverState *bs)
bdrv_drain_all_end_quiesce(bs);
}
+ /* Free memory */
+ g_free(bs->opaque);
+ qobject_unref(bs->options);
+ qobject_unref(bs->explicit_options);
+ qobject_unref(bs->full_open_options);
+ g_free(bs->block_status_cache);
+
+ bdrv_release_named_dirty_bitmaps(bs);
+ assert(QLIST_EMPTY(&bs->dirty_bitmaps));
+
+ QLIST_FOREACH_SAFE(ban, &bs->aio_notifiers, list, ban_next) {
+ g_free(ban);
+ }
+
g_free(bs);
}
No need to zero all these things before g_free(bs). Move memory freeing to the end of the function to simplify further conversion to transaction action. Signed-off-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com> --- block.c | 40 ++++++++++++++-------------------------- 1 file changed, 14 insertions(+), 26 deletions(-)