- my $res = $CHILD_ERROR >> 8;
- if ($res == 0) { push @{$count->{'ok'}}, $zone; }
- elsif ($res == 1) { push @{$count->{'warn'}}, $zone; }
- elsif ($res == 2) { push @{$count->{'critical'}}, $zone; }
- else { push @{$count->{'unknown'}}, $zone; };
-};
+ my ($res, $det) = $threads{$zone}->join();
+
+ push @details, @$det;
+
+ if ($res == 0) { push @{$count->{'ok'}}, $zone; }
+ elsif ($res == 1) { push @{$count->{'warn'}}, $zone; }
+ elsif ($res == 2) { push @{$count->{'critical'}}, $zone; }
+ else { push @{$count->{'unknown'}}, $zone; };
+ delete $threads{$zone};
+ }
+ sleep(1) unless scalar keys %threads == 0;
+}
+for my $zone (sort {$a cmp $b} keys %threads) {
+ push @{$count->{'warn'}}, $zone;
+ push @details, "$zone: timeout during check\n";
+ $threads{$zone}->kill('KILL')->detach();
+}
+
+for my $k (keys %$count) {
+ @{$count->{$k}} = sort {$a cmp $b} @{$count->{$k}};
+}