[pve-devel] [PATCH cluster v4 4/4] cfs_lock: save and restore outer alarm

Thomas Lamprecht t.lamprecht at proxmox.com
Thu Nov 9 09:47:27 CET 2017


Signed-off-by: Thomas Lamprecht <t.lamprecht at proxmox.com>
---
 data/PVE/Cluster.pm | 8 +++++---
 1 file changed, 5 insertions(+), 3 deletions(-)

diff --git a/data/PVE/Cluster.pm b/data/PVE/Cluster.pm
index af30f09..0a9dfa3 100644
--- a/data/PVE/Cluster.pm
+++ b/data/PVE/Cluster.pm
@@ -860,6 +860,8 @@ sub cfs_write_file {
 my $cfs_lock = sub {
     my ($lockid, $timeout, $code, @param) = @_;
 
+    my $prev_alarm = alarm(0); # suspend outer alarm early
+
     my $res;
     my $got_lock = 0;
 
@@ -895,8 +897,8 @@ my $cfs_lock = sub {
 
 	# fixed command timeout: cfs locks have a timeout of 120
 	# using 60 gives us another 60 seconds to abort the task
-	alarm(60);
 	local $SIG{ALRM} = sub { die "got lock timeout - aborting command\n"; };
+	alarm(60);
 
 	cfs_update(); # make sure we read latest versions inside code()
 
@@ -907,12 +909,12 @@ my $cfs_lock = sub {
 
     my $err = $@;
 
-    alarm(0);
-
     $err = "no quorum!\n" if !$got_lock && !check_cfs_quorum(1);
 
     rmdir $filename if $got_lock; # if we held the lock always unlock again
 
+    alarm($prev_alarm);
+
     if ($err) {
         $@ = "error with cfs lock '$lockid': $err";
         return undef;
-- 
2.11.0





More information about the pve-devel mailing list