|
@@ -1207,7 +1207,7 @@ static void migrate_fd_cleanup(MigrationState *s)
|
|
|
/* It is used on info migrate. We can't free it */
|
|
|
error_report_err(error_copy(s->error));
|
|
|
}
|
|
|
- notifier_list_notify(&migration_state_notifiers, s);
|
|
|
+ migration_call_notifiers(s);
|
|
|
block_cleanup_parameters();
|
|
|
yank_unregister_instance(MIGRATION_YANK_INSTANCE);
|
|
|
}
|
|
@@ -1311,14 +1311,24 @@ static void migrate_fd_cancel(MigrationState *s)
|
|
|
}
|
|
|
}
|
|
|
|
|
|
-void add_migration_state_change_notifier(Notifier *notify)
|
|
|
+void migration_add_notifier(Notifier *notify,
|
|
|
+ void (*func)(Notifier *notifier, void *data))
|
|
|
{
|
|
|
+ notify->notify = func;
|
|
|
notifier_list_add(&migration_state_notifiers, notify);
|
|
|
}
|
|
|
|
|
|
-void remove_migration_state_change_notifier(Notifier *notify)
|
|
|
+void migration_remove_notifier(Notifier *notify)
|
|
|
+{
|
|
|
+ if (notify->notify) {
|
|
|
+ notifier_remove(notify);
|
|
|
+ notify->notify = NULL;
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+void migration_call_notifiers(MigrationState *s)
|
|
|
{
|
|
|
- notifier_remove(notify);
|
|
|
+ notifier_list_notify(&migration_state_notifiers, s);
|
|
|
}
|
|
|
|
|
|
bool migration_in_setup(MigrationState *s)
|
|
@@ -2233,7 +2243,7 @@ static int postcopy_start(MigrationState *ms, Error **errp)
|
|
|
* spice needs to trigger a transition now
|
|
|
*/
|
|
|
ms->postcopy_after_devices = true;
|
|
|
- notifier_list_notify(&migration_state_notifiers, ms);
|
|
|
+ migration_call_notifiers(ms);
|
|
|
|
|
|
ms->downtime = qemu_clock_get_ms(QEMU_CLOCK_REALTIME) - time_at_stop;
|
|
|
|
|
@@ -3313,7 +3323,7 @@ void migrate_fd_connect(MigrationState *s, Error *error_in)
|
|
|
rate_limit = migrate_max_bandwidth();
|
|
|
|
|
|
/* Notify before starting migration thread */
|
|
|
- notifier_list_notify(&migration_state_notifiers, s);
|
|
|
+ migration_call_notifiers(s);
|
|
|
}
|
|
|
|
|
|
migration_rate_set(rate_limit);
|