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


Reply via email to