From cec440f70272d1bc1960cb59efc10b468f149005 Mon Sep 17 00:00:00 2001 From: Daniel Berteaud Date: Wed, 24 Oct 2018 23:25:09 +0200 Subject: [PATCH] Various fixes in lock handling --- virt-backup | 22 ++++++++++++++++------ 1 file changed, 16 insertions(+), 6 deletions(-) diff --git a/virt-backup b/virt-backup index 698cf2f..4e70fb7 100644 --- a/virt-backup +++ b/virt-backup @@ -234,12 +234,20 @@ print "\n" if ($opts{debug}); # Acquire an exclusive lock so we can ensure only one copy # of virt-backup can run at a time +print "Trying to acquire an exclusive lock\n" if ($opts{debug}); + my $locker = LockFile::Simple->make( - -max => 180, - -delay => 1 + -max => 180, + -delay => 1, + -autoclean => 1, + -ext => 'lck', + -hold => 60 ); -print "Trying to acquire an exclusive lock\n" if ($opts{debug}); -die "Can't acquire exclusive lock" unless $locker->lock($opts{lockdir} . '/virt-backup'); +my $glock = undef; +if ($opts{action} =~ m/^dump|convert|chunkmount$/){ + print "Trying to acquire an exclusive lock\n" if ($opts{debug}); + my $glock = $locker->lock($opts{lockdir} . '/virt-backup') || die "Can't acquire exclusive lock\n"; +} foreach our $vm (@vms){ # Create a new object representing the VM @@ -290,8 +298,10 @@ foreach our $vm (@vms){ } } -print "Releasing exclusive lock\n" if ($opts{debug}); -$locker->unlock($opts{lockdir} . "/virt-backup"); +if ($glock){ + print "Releasing exclusive lock\n" if ($opts{debug}); + $glock->release; +} exit 0; ############################################################################