Imported Upstream version 3.3.0
[debian/amanda] / perl / Amanda / Changer / rait.pm
index 6561f058c0c9485f211c237ff2923a34d9ab6fe2..26486bc495ce99d5e9c0a92feccb55cf8e2b8e75 100644 (file)
@@ -64,8 +64,12 @@ sub new {
        my @annotated_errs;
        for my $i (0 .. @children-1) {
            next unless $children[$i]->isa("Amanda::Changer::Error");
-           push @annotated_errs,
-               [ $kidspecs[$i], $children[$i] ];
+           if ($children[$i]->isa("Amanda::Changer::Error")) {
+               push @annotated_errs,
+                   [ $kidspecs[$i], $children[$i] ];
+           } elsif ($children[$i]->isa("Amanda::Changer")) {
+               $children[$i]->quit();
+           }
        }
        return Amanda::Changer->make_combined_error(
                "fatal", [ @annotated_errs ]);
@@ -81,6 +85,17 @@ sub new {
     return $self;
 }
 
+sub quit {
+    my $self = shift;
+
+    # quit each child
+    foreach my $child (@{$self->{'children'}}) {
+       $child->quit() if $child ne "ERROR";
+    }
+
+    $self->SUPER::quit();
+}
+
 # private method to help handle slot input
 sub _kid_slots_ok {
     my ($self, $res_cb, $slot, $kid_slots_ref, $err_ref) = @_;
@@ -304,6 +319,7 @@ sub info_key {
                next unless exists($kid_info{'num_slots'});
                my $kid_num_slots = $kid_info{'num_slots'};
                if (defined $num_slots and $num_slots != $kid_num_slots) {
+                   debug("chg-rait: children have different slot counts!");
                    $num_slots = -1;
                } else {
                    $num_slots = $kid_num_slots;