aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--buffered_file.c8
-rw-r--r--migration.c7
-rw-r--r--migration.h2
3 files changed, 11 insertions, 6 deletions
diff --git a/buffered_file.c b/buffered_file.c
index d3bc160835..77928f02c1 100644
--- a/buffered_file.c
+++ b/buffered_file.c
@@ -150,8 +150,12 @@ static int buffered_close(void *opaque)
if (ret < 0) {
break;
}
- if (s->freeze_output)
- migrate_fd_wait_for_unfreeze(s->migration_state);
+ if (s->freeze_output) {
+ ret = migrate_fd_wait_for_unfreeze(s->migration_state);
+ if (ret < 0) {
+ break;
+ }
+ }
}
ret2 = migrate_fd_close(s->migration_state);
diff --git a/migration.c b/migration.c
index ea21dc40e1..2c93951423 100644
--- a/migration.c
+++ b/migration.c
@@ -370,13 +370,13 @@ static void migrate_fd_cancel(MigrationState *s)
migrate_fd_cleanup(s);
}
-void migrate_fd_wait_for_unfreeze(MigrationState *s)
+int migrate_fd_wait_for_unfreeze(MigrationState *s)
{
int ret;
DPRINTF("wait for unfreeze\n");
if (s->state != MIG_STATE_ACTIVE)
- return;
+ return -EINVAL;
do {
fd_set wfds;
@@ -388,8 +388,9 @@ void migrate_fd_wait_for_unfreeze(MigrationState *s)
} while (ret == -1 && (s->get_error(s)) == EINTR);
if (ret == -1) {
- qemu_file_set_error(s->file, -s->get_error(s));
+ return -s->get_error(s);
}
+ return 0;
}
int migrate_fd_close(MigrationState *s)
diff --git a/migration.h b/migration.h
index ec022d604f..1c3e9b750e 100644
--- a/migration.h
+++ b/migration.h
@@ -81,7 +81,7 @@ void migrate_fd_connect(MigrationState *s);
ssize_t migrate_fd_put_buffer(MigrationState *s, const void *data,
size_t size);
void migrate_fd_put_ready(MigrationState *s);
-void migrate_fd_wait_for_unfreeze(MigrationState *s);
+int migrate_fd_wait_for_unfreeze(MigrationState *s);
int migrate_fd_close(MigrationState *s);
void add_migration_state_change_notifier(Notifier *notify);