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, Daniel -- Daniel Veillard | libxml Gnome XML XSLT toolkit http://xmlsoft.org/ daniel@xxxxxxxxxxxx | Rpmfind RPM search engine http://rpmfind.net/ http://veillard.com/ | virtualization library http://libvirt.org/ -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list