From 0037d63436e875e2a980e2a35d197ae402ec581e Mon Sep 17 00:00:00 2001 From: =?utf8?q?Fabian=20Gr=C3=BCnbichler?= Date: Wed, 21 Dec 2016 10:54:17 +0100 Subject: [PATCH] set 'snapshot-delete' lock when deleting snapshot MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit 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 --- src/PVE/AbstractConfig.pm | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/PVE/AbstractConfig.pm b/src/PVE/AbstractConfig.pm index ac12fd1..23512d0 100644 --- a/src/PVE/AbstractConfig.pm +++ b/src/PVE/AbstractConfig.pm @@ -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); } -- 2.39.2