summary refs log tree commit diff stats
path: root/ui
diff options
context:
space:
mode:
authorSteve Sistare <steven.sistare@oracle.com>2024-02-22 09:28:30 -0800
committerPeter Xu <peterx@redhat.com>2024-02-28 11:31:28 +0800
commit9d9babf78d8f0a2f26b8dd5de3767bd4a4e2020e (patch)
tree81614f1d26e880cb76cd8d2b4157e7ea1b52adb7 /ui
parent3e7757301cc93eaca47cad855630467804b1a2a4 (diff)
downloadfocaccia-qemu-9d9babf78d8f0a2f26b8dd5de3767bd4a4e2020e.tar.gz
focaccia-qemu-9d9babf78d8f0a2f26b8dd5de3767bd4a4e2020e.zip
migration: MigrationEvent for notifiers
Passing MigrationState to notifiers is unsound because they could access
unstable migration state internals or even modify the state.  Instead, pass
the minimal info needed in a new MigrationEvent struct, which could be
extended in the future if needed.

Suggested-by: Peter Xu <peterx@redhat.com>
Signed-off-by: Steve Sistare <steven.sistare@oracle.com>
Reviewed-by: Peter Xu <peterx@redhat.com>
Reviewed-by: David Hildenbrand <david@redhat.com>
Link: https://lore.kernel.org/r/1708622920-68779-5-git-send-email-steven.sistare@oracle.com
Signed-off-by: Peter Xu <peterx@redhat.com>
Diffstat (limited to 'ui')
-rw-r--r--ui/spice-core.c9
1 files changed, 4 insertions, 5 deletions
diff --git a/ui/spice-core.c b/ui/spice-core.c
index b3cd229023..0a59876da2 100644
--- a/ui/spice-core.c
+++ b/ui/spice-core.c
@@ -571,19 +571,18 @@ static SpiceInfo *qmp_query_spice_real(Error **errp)
 static int migration_state_notifier(NotifierWithReturn *notifier,
                                     void *data, Error **errp)
 {
-    MigrationState *s = data;
+    MigrationEvent *e = data;
 
     if (!spice_have_target_host) {
         return 0;
     }
 
-    if (migration_in_setup(s)) {
+    if (e->type == MIG_EVENT_PRECOPY_SETUP) {
         spice_server_migrate_start(spice_server);
-    } else if (migration_has_finished(s) ||
-               migration_in_postcopy_after_devices(s)) {
+    } else if (e->type == MIG_EVENT_PRECOPY_DONE) {
         spice_server_migrate_end(spice_server, true);
         spice_have_target_host = false;
-    } else if (migration_has_failed(s)) {
+    } else if (e->type == MIG_EVENT_PRECOPY_FAILED) {
         spice_server_migrate_end(spice_server, false);
         spice_have_target_host = false;
     }