"Dr. David Alan Gilbert (git)" <dgilb...@redhat.com> wrote: > From: "Dr. David Alan Gilbert" <dgilb...@redhat.com> > > There's a race if someone does a 'stop' near the end of migrate; > the migration process goes through two runstates: > 'finish migrate' > 'postmigrate' > > If the user issues a 'stop' between the two we end up with invalid > state transitions. > Add the transitions as valid. > > Signed-off-by: Dr. David Alan Gilbert <dgilb...@redhat.com>
Reviewed-by: Juan Quintela <quint...@redhat.com> To answer Peter question: int vm_stop(RunState state) { .... we don't care about this case .... return do_vm_stop(state); } static int do_vm_stop(RunState state) { int ret = 0; if (runstate_is_running()) { cpu_disable_ticks(); pause_all_vcpus(); runstate_set(state); vm_state_notify(0, state); qapi_event_send_stop(&error_abort); } bdrv_drain_all(); replay_disable_events(); ret = bdrv_flush_all(); return ret; } int runstate_is_running(void) { return runstate_check(RUN_STATE_RUNNING); } So, "stop" only changes states when we are in RUNNING state. The idea was that after migration, the only valid command (as in the film "it should do something")is "run". Later, Juan.