# Copyright (c) 2008-2012 Zmanda, Inc. All Rights Reserved.
#
-# This program is free software; you can redistribute it and/or modify it
-# under the terms of the GNU General Public License version 2 as published
-# by the Free Software Foundation.
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
bless ($self, $class);
+ if ($config->{'changerfile'}) {
+ $self->{'state_filename'} = Amanda::Config::config_dir_relative($config->{'changerfile'});
+ }
+ $self->{'lock-timeout'} = $config->get_property('lock-timeout');
+
$self->{'num-slot'} = $config->get_property('num-slot');
$self->{'auto-create-slot'} = $config->get_boolean_property(
'auto-create-slot', 0);
my $self = shift;
my $cb = shift;
my $poll = 0; # first delay will be 0.1s; see below
+ my $time;
+
+ if (defined $self->{'lock-timeout'}) {
+ $time = time() + $self->{'lock-timeout'};
+ } else {
+ $time = time() + 1000;
+ }
+
my $steps = define_steps
cb_ref => \$cb;
step lock => sub {
my $rv = $self->{'fl'}->lock_rd();
- if ($rv == 1) {
+ if ($rv == 1 && time() < $time) {
# loop until we get the lock, increasing $poll to 10s
$poll += 100 unless $poll >= 10000;
return Amanda::MainLoop::call_after($poll, $steps->{'lock'});
+ } elsif ($rv == 1) {
+ return $self->make_error("fatal", $cb,
+ message => "Timeout trying to lock '$self->{'umount_lockfile'}'");
} elsif ($rv == -1) {
return $self->make_error("fatal", $cb,
message => "Error locking '$self->{'umount_lockfile'}'");