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 <vsement...@virtuozzo.com> --- block.c | 40 ++++++++++++++-------------------------- 1 file changed, 14 insertions(+), 26 deletions(-) diff --git a/block.c b/block.c index 71a5aec24c..231d1fc3ea 100644 --- a/block.c +++ b/block.c @@ -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); } -- 2.31.1