void migrate_fd_monitor_suspend(FdMigrationState *s)
{
s->mon_resume = cur_mon;
- monitor_suspend(cur_mon);
- dprintf("suspending monitor\n");
+ if (monitor_suspend(cur_mon) == 0)
+ dprintf("suspending monitor\n");
+ else
+ monitor_printf(cur_mon, "terminal does not allow synchronous "
+ "migration, continuing detached\n");
}
void migrate_fd_error(FdMigrationState *s)
dprintf("iterate\n");
if (qemu_savevm_state_iterate(s->file) == 1) {
+ int state;
dprintf("done iterating\n");
vm_stop(0);
bdrv_flush_all();
- qemu_savevm_state_complete(s->file);
- s->state = MIG_STATE_COMPLETED;
+ if ((qemu_savevm_state_complete(s->file)) < 0) {
+ vm_start();
+ state = MIG_STATE_ERROR;
+ } else {
+ state = MIG_STATE_COMPLETED;
+ }
migrate_fd_cleanup(s);
+ s->state = state;
}
}