[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