static void migrate_fd_cleanup(void *opaque) { MigrationState *s = opaque; qemu_bh_delete(s->cleanup_bh); s->cleanup_bh = NULL; if (s->file) { DPRINTF("closing file\n"); qemu_mutex_unlock_iothread(); qemu_thread_join(&s->thread); qemu_mutex_lock_iothread(); qemu_fclose(s->file); s->file = NULL; } assert(s->state != MIG_STATE_ACTIVE); if (s->state != MIG_STATE_COMPLETED) { qemu_savevm_state_cancel(); if (s->state == MIG_STATE_CANCELLING) { migrate_set_state(s, MIG_STATE_CANCELLING, MIG_STATE_CANCELLED); } } notifier_list_notify(&migration_state_notifiers, s); }
void migrate_fd_cancel(MigrationState *mig_state) { FdMigrationState *s = migrate_to_fms(mig_state); if (s->state == MIG_STATE_CANCELLED) { return; } DPRINTF("cancelling migration\n"); s->state = MIG_STATE_CANCELLED; notifier_list_notify(&migration_state_notifiers); if (ft_mode) { if (s->file) { qemu_ft_trans_cancel(s->file); } ft_mode = FT_OFF; event_tap_unregister(); } if (s->file) { qemu_savevm_state_cancel(s->mon, s->file); migrate_fd_cleanup(s); } }
static void migrate_ft_trans_error(FdMigrationState *s) { ft_mode = FT_ERROR; qemu_savevm_state_cancel(s->mon, s->file); migrate_fd_error(s); /* we need to set vm running to avoid assert in virtio-net */ vm_start(); event_tap_unregister(); vm_stop(0); }
static void migrate_fd_cancel(MigrationState *s) { if (s->state != MIG_STATE_ACTIVE) return; DPRINTF("cancelling migration\n"); s->state = MIG_STATE_CANCELLED; notifier_list_notify(&migration_state_notifiers, s); qemu_savevm_state_cancel(); migrate_fd_cleanup(s); }
void migrate_fd_cancel(MigrationState *mig_state) { FdMigrationState *s = migrate_to_fms(mig_state); if (s->state != MIG_STATE_ACTIVE) return; DPRINTF("cancelling migration\n"); s->state = MIG_STATE_CANCELLED; qemu_savevm_state_cancel(s->mon, s->file); migrate_fd_cleanup(s); }