Daniel Veillard wrote: > On Thu, Jan 20, 2011 at 07:27:14PM -0700, Jim Fehlig wrote: > >> When restoring a saved qemu instance via JSON monitor, the vm is >> left in a paused state. Turns out the 'cont' cmd was failing with >> "MigrationExpected" error class and "An incoming migration is >> expected before this command can be executed" error description >> due to migration (restore) not yet complete. >> >> Detect if 'cont' cmd fails with "MigrationExpecte" error class and >> retry 'cont' cmd. >> >> V2: Fix potential double-free noted by Laine Stump >> --- >> src/qemu/qemu_monitor_json.c | 22 +++++++++++++++++++--- >> 1 files changed, 19 insertions(+), 3 deletions(-) >> >> diff --git a/src/qemu/qemu_monitor_json.c b/src/qemu/qemu_monitor_json.c >> index 7387089..35db285 100644 >> --- a/src/qemu/qemu_monitor_json.c >> +++ b/src/qemu/qemu_monitor_json.c >> @@ -702,13 +702,29 @@ qemuMonitorJSONStartCPUs(qemuMonitorPtr mon, >> int ret; >> virJSONValuePtr cmd = qemuMonitorJSONMakeCommand("cont", NULL); >> virJSONValuePtr reply = NULL; >> + int i = 0, timeout = 3; >> if (!cmd) >> return -1; >> >> - ret = qemuMonitorJSONCommand(mon, cmd, &reply); >> + do { >> + ret = qemuMonitorJSONCommand(mon, cmd, &reply); >> >> - if (ret == 0) >> - ret = qemuMonitorJSONCheckError(cmd, reply); >> + if (ret != 0) >> + break; >> + >> + /* If no error, we're done */ >> + if ((ret = qemuMonitorJSONCheckError(cmd, reply)) == 0) >> + break; >> + >> + /* If error class is not MigrationExpected, we're done. >> + * Otherwise try 'cont' cmd again */ >> + if (!qemuMonitorJSONHasError(reply, "MigrationExpected")) >> + break; >> + >> + virJSONValueFree(reply); >> + reply = NULL; >> + usleep(250000); >> + } while (++i <= timeout); >> >> virJSONValueFree(cmd); >> virJSONValueFree(reply); >> > > Looks fine to me now, ACK, > Thanks; pushed. Regards, Jim -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list