70 lines
2.0 KiB
Diff
70 lines
2.0 KiB
Diff
|
From fa25441af918e5e19c181cd5aac537a6bb8799ed Mon Sep 17 00:00:00 2001
|
||
|
From: Paolo Bonzini <pbonzini@redhat.com>
|
||
|
Date: Fri, 22 Feb 2013 17:36:09 +0100
|
||
|
Subject: [PATCH 207/246] migration: move more error handling to
|
||
|
migrate_fd_cleanup
|
||
|
|
||
|
The next patch will add more cases where qemu_savevm_state_cancel
|
||
|
needs to be called; prepare for that already, the function can be
|
||
|
called twice with no ill effect.
|
||
|
|
||
|
Reviewed-by: Orit Wasserman <owasserm@redhat.com>
|
||
|
Reviewed-by: Juan Quintela <quintela@redhat.com>
|
||
|
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
|
||
|
Signed-off-by: Juan Quintela <quintela@redhat.com>
|
||
|
---
|
||
|
migration.c | 16 ++++++++++------
|
||
|
1 file changed, 10 insertions(+), 6 deletions(-)
|
||
|
|
||
|
diff --git a/migration.c b/migration.c
|
||
|
index d601641..739e38c 100644
|
||
|
--- a/migration.c
|
||
|
+++ b/migration.c
|
||
|
@@ -260,7 +260,7 @@ void qmp_migrate_set_capabilities(MigrationCapabilityStatusList *params,
|
||
|
|
||
|
/* shared migration helpers */
|
||
|
|
||
|
-static int migrate_fd_cleanup(MigrationState *s)
|
||
|
+static void migrate_fd_cleanup(MigrationState *s)
|
||
|
{
|
||
|
int ret = 0;
|
||
|
|
||
|
@@ -271,7 +271,13 @@ static int migrate_fd_cleanup(MigrationState *s)
|
||
|
}
|
||
|
|
||
|
assert(s->fd == -1);
|
||
|
- return ret;
|
||
|
+ if (ret < 0 && s->state == MIG_STATE_ACTIVE) {
|
||
|
+ s->state = MIG_STATE_ERROR;
|
||
|
+ }
|
||
|
+
|
||
|
+ if (s->state != MIG_STATE_ACTIVE) {
|
||
|
+ qemu_savevm_state_cancel();
|
||
|
+ }
|
||
|
}
|
||
|
|
||
|
void migrate_fd_error(MigrationState *s)
|
||
|
@@ -285,9 +291,8 @@ void migrate_fd_error(MigrationState *s)
|
||
|
static void migrate_fd_completed(MigrationState *s)
|
||
|
{
|
||
|
DPRINTF("setting completed state\n");
|
||
|
- if (migrate_fd_cleanup(s) < 0) {
|
||
|
- s->state = MIG_STATE_ERROR;
|
||
|
- } else {
|
||
|
+ migrate_fd_cleanup(s);
|
||
|
+ if (s->state == MIG_STATE_ACTIVE) {
|
||
|
s->state = MIG_STATE_COMPLETED;
|
||
|
runstate_set(RUN_STATE_POSTMIGRATE);
|
||
|
}
|
||
|
@@ -322,7 +327,6 @@ static void migrate_fd_cancel(MigrationState *s)
|
||
|
|
||
|
s->state = MIG_STATE_CANCELLED;
|
||
|
notifier_list_notify(&migration_state_notifiers, s);
|
||
|
- qemu_savevm_state_cancel();
|
||
|
|
||
|
migrate_fd_cleanup(s);
|
||
|
}
|
||
|
--
|
||
|
1.8.2.1
|
||
|
|