return ret;
}
-static int qemuDomainSnapshotDiscard(struct qemud_driver *driver,
- virDomainObjPtr vm,
- virDomainSnapshotObjPtr snap)
+static int
+qemuDomainSnapshotDiscard(struct qemud_driver *driver,
+ virDomainObjPtr vm,
+ virDomainSnapshotObjPtr snap,
+ bool update_current)
{
char *snapFile = NULL;
int ret = -1;
}
if (snap == vm->current_snapshot) {
- if (snap->def->parent) {
+ if (update_current && snap->def->parent) {
parentsnap = virDomainSnapshotFindByName(&vm->snapshots,
snap->def->parent);
if (!parentsnap) {
struct qemud_driver *driver;
virDomainObjPtr vm;
int err;
+ bool current;
};
static void
struct snap_remove *curr = data;
int err;
- err = qemuDomainSnapshotDiscard(curr->driver, curr->vm, snap);
+ if (snap->def->current)
+ curr->current = true;
+ err = qemuDomainSnapshotDiscard(curr->driver, curr->vm, snap, false);
if (err && !curr->err)
curr->err = err;
}
rem.driver = driver;
rem.vm = vm;
rem.err = 0;
+ rem.current = false;
virDomainSnapshotForEachDescendant(&vm->snapshots,
snap,
qemuDomainSnapshotDiscardDescendant,
&rem);
if (rem.err < 0)
goto endjob;
+ if (rem.current)
+ vm->current_snapshot = snap;
} else {
rep.driver = driver;
rep.snap = snap;
goto endjob;
}
- ret = qemuDomainSnapshotDiscard(driver, vm, snap);
+ ret = qemuDomainSnapshotDiscard(driver, vm, snap, true);
endjob:
if (qemuDomainObjEndJob(driver, vm) == 0)