Imported Upstream version 3.3.3
[debian/amanda] / perl / Amanda / Changer / multi.pm
index 9324a54124fbf4eaade3855945a836c1eaaaa7c7..7a087b5d1af96fcc72b621efdcdd3f1ed2252ba2 100644 (file)
@@ -1,8 +1,9 @@
-# Copyright (c) 2008,2009,2010 Zmanda, Inc.  All Rights Reserved.
+# 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
@@ -111,6 +112,7 @@ sub new {
     }
 
     my $state_filename = Amanda::Config::config_dir_relative($config->{'changerfile'});
+    my $lock_timeout = $config->{'lock-timeout'};
     Amanda::Debug::debug("Using state file: $state_filename");
 
     my $self = {
@@ -122,6 +124,7 @@ sub new {
        state_filename => $state_filename,
        first_slot => $first_slot,
        last_slot => $last_slot,
+       'lock-timeout' => $lock_timeout,
     };
 
     bless ($self, $class);
@@ -410,7 +413,8 @@ sub inventory {
            my $s = { slot => $slot,
                      state => $state->{slots}->{$unaliased}->{state} || Amanda::Changer::SLOT_UNKNOWN,
                      reserved => $self->_is_slot_in_use($state, $slot) };
-           if (defined $state->{slots}->{$unaliased}) {
+           if (defined $state->{slots}->{$unaliased} and
+               exists $state->{slots}->{$unaliased}->{device_status}) {
                $s->{'device_status'} =
                              $state->{slots}->{$unaliased}->{device_status};
                if ($s->{'device_status'} != $DEVICE_STATUS_SUCCESS) {
@@ -622,7 +626,9 @@ sub _get_current {
     if (defined $state->{current_slot}) {
        my $slot = $self->{number}->{$state->{current_slot}};
        # return the slot if it exist.
-       return $slot if $slot >= $self->{'first_slot'} && $slot < $self->{'last_slot'};
+       return $slot if defined $slot and
+                               $slot >= $self->{'first_slot'} and
+                               $slot < $self->{'last_slot'};
        Amanda::Debug::debug("statefile current_slot is not configured");
     }
     # return the first slot