[libvirt] [PATCHv4 06/51] snapshot: improve reverting to qemu paused snapshots
Eric Blake
eblake at redhat.com
Fri Sep 2 18:03:38 UTC 2011
On 09/01/2011 10:24 PM, Eric Blake wrote:
> If you take a checkpoint snapshot of a running domain, then pause
> qemu, then restore the snapshot, the result should be a running
> domain, but the code was leaving things paused. Furthermore, if
> you take a checkpoint of a paused domain, then run, then restore,
> there was a brief but non-deterministic window of time where the
> domain was running rather than paused. Fix both of these
> discrepancies by always pausing before restoring.
>
> Also, check that the VM is active every time lock is dropped
> between two monitor calls.
>
> Finally, straighten out the events that get emitted on each
> transition.
>
> * src/qemu/qemu_driver.c (qemuDomainRevertToSnapshot): Always
> pause before reversion, and improve events.
> - } else {
> - virDomainObjSetState(vm, VIR_DOMAIN_RUNNING,
> - VIR_DOMAIN_RUNNING_FROM_SNAPSHOT);
> + virDomainEventFree(event);
> + if (was_stopped) {
> + /* Transition 2 */
> + detail = VIR_DOMAIN_EVENT_STARTED_FROM_SNAPSHOT;
> + event = virDomainEventNewFromObj(vm,
> + VIR_DOMAIN_EVENT_STARTED,
> + detail);
> + } else if (was_running) {
> + /* Transition 8 */
> + detail = VIR_DOMAIN_EVENT_RESUMED;
> + event = virDomainEventNewFromObj(vm,
> + VIR_DOMAIN_EVENT_RESUMED,
> + detail);
> + }
> }
Transition 5 leaks a freed event pointer to the rest of the function
(never a good idea). I'm squashing this in before pushing the portion
of series that includes this patch.
diff --git i/src/qemu/qemu_driver.c w/src/qemu/qemu_driver.c
index 10357e4..e45b29e 100644
--- i/src/qemu/qemu_driver.c
+++ w/src/qemu/qemu_driver.c
@@ -9011,6 +9011,7 @@ static int
qemuDomainRevertToSnapshot(virDomainSnapshotPtr snapshot,
if (rc < 0)
goto endjob;
virDomainEventFree(event);
+ event = NULL;
if (was_stopped) {
/* Transition 2 */
detail = VIR_DOMAIN_EVENT_STARTED_FROM_SNAPSHOT;
--
Eric Blake eblake at redhat.com +1-801-349-2682
Libvirt virtualization library http://libvirt.org
More information about the libvir-list
mailing list