The multifd threads still may access the colo cache, so release it
only after they terminate.
Reviewed-by: Fabiano Rosas <farosas@suse.de>
Reviewed-by: Peter Xu <peterx@redhat.com>
Signed-off-by: Lukas Straub <lukasstraub2@web.de>
---
migration/colo.c | 3 ---
migration/migration.c | 3 +++
2 files changed, 3 insertions(+), 3 deletions(-)
diff --git a/migration/colo.c b/migration/colo.c
index 97a224c39c49ff2269f375db47112458cab0b4cb..96102c9d0fb3b60e063c81ce07b730011bc4919f 100644
--- a/migration/colo.c
+++ b/migration/colo.c
@@ -949,7 +949,4 @@ void coroutine_fn colo_incoming_co(void)
/* Wait checkpoint incoming thread exit before free resource */
qemu_thread_join(&th);
bql_lock();
-
- /* We hold the global BQL, so it is safe here */
- colo_release_ram_cache();
}
diff --git a/migration/migration.c b/migration/migration.c
index dba5d6ede579da42693d5270ede9660fb145238a..f36d42ef657bdf26d78ca642d77a9b76e1c0c174 100644
--- a/migration/migration.c
+++ b/migration/migration.c
@@ -454,6 +454,9 @@ void migration_incoming_state_destroy(void)
* BQL and retake unconditionally.
*/
assert(bql_locked());
+ if (migrate_colo()) {
+ colo_release_ram_cache();
+ }
qemu_loadvm_state_cleanup(mis);
if (mis->to_src_file) {
--
2.39.5