set 'snapshot-delete' lock when deleting snapshot

unless we are in cleanup mode from a failed snapshot_create,
in which case the config already has a 'snapshot' lock.

this is necessary to prevent concurrent starting of or other
actions on the guest in the windows inbetween holding the
flock, e.g. when removing the volume snapshot (which can
take a bit of time).

Signed-off-by: Fabian Grünbichler <f.gruenbichler@proxmox.com>
This commit is contained in:
Fabian Grünbichler 2016-12-21 10:54:17 +01:00 committed by Dietmar Maurer
parent 4eff045b05
commit 0037d63436

View File

@ -468,6 +468,9 @@ sub snapshot_delete {
my $snap;
my $unused = [];
$class->set_lock($vmid, 'snapshot-delete')
if (!$drivehash); # doesn't already have a 'snapshot' lock
my $unlink_parent = sub {
my ($confref, $new_parent) = @_;
@ -486,7 +489,6 @@ sub snapshot_delete {
my $conf = $class->load_config($vmid);
if (!$drivehash) {
$class->check_lock($conf);
die "you can't delete a snapshot if vm is a template\n"
if $class->is_template($conf);
}
@ -512,7 +514,7 @@ sub snapshot_delete {
$snap->{snapstate} = 'delete';
} else {
delete $conf->{snapshots}->{$snapname};
delete $conf->{lock} if $drivehash;
delete $conf->{lock};
foreach my $volid (@$unused) {
$class->add_unused_volume($conf, $volid);
}