int do_migrate(Monitor *mon, const QDict *qdict, QObject **ret_data)
{
- MigrationState *s = NULL;
+ FdMigrationState *s = NULL;
const char *p;
int detach = qdict_get_try_bool(qdict, "detach", 0);
int blk = qdict_get_try_bool(qdict, "blk", 0);
current_migration->release(current_migration);
}
- current_migration = s;
+ current_migration = &s->mig_state;
notifier_list_notify(&migration_state_notifiers, NULL);
return 0;
}
qemu_set_fd_handler2(s->fd, NULL, NULL, NULL, NULL);
qemu_file_put_notify(s->file);
- if (qemu_file_has_error(s->file)) {
+ if (qemu_file_get_error(s->file)) {
migrate_fd_error(s);
}
}
void migrate_fd_put_ready(void *opaque)
{
FdMigrationState *s = opaque;
+ int ret;
if (s->state != MIG_STATE_ACTIVE) {
DPRINTF("put_ready returning because of non-active state\n");
}
DPRINTF("iterate\n");
- if (qemu_savevm_state_iterate(s->mon, s->file) == 1) {
+ ret = qemu_savevm_state_iterate(s->mon, s->file);
+ if (ret < 0) {
+ migrate_fd_error(s);
+ } else if (ret == 1) {
int old_vm_running = runstate_is_running();
DPRINTF("done iterating\n");
} while (ret == -1 && (s->get_error(s)) == EINTR);
if (ret == -1) {
- qemu_file_set_error(s->file);
+ qemu_file_set_error(s->file, -s->get_error(s));
}
}