+
+ } elsif ($res == ZOOM::IRSpy::Status::TEST_SKIPPED) {
+ $conn->log("irspy_test", "test skipped during task $task");
+ $conn->current_task(0);
+ $conn->next_task(0);
+ $nskipped++;
+
+ } else {
+ die "unknown callback return-value '$res'";
+ }
+ }
+
+ $this->log("irspy", "exiting main loop");
+
+ # Sanity checks: none of the following should ever happen
+ my $finished = 1;
+ $this->log("irspy", "performing end-of-run sanity-checks");
+ foreach my $conn (@conn) {
+ my $test = $conn->option("current_test_address");
+ my $next = $this->_next_test($test);
+ if (defined $next) {
+ $this->log("irspy",
+ "$conn (in test '$test') has queued test '$next'");
+ $finished = 0;
+ }
+ if (my $task = $conn->current_task()) {
+ $this->log("irspy", "$conn still has an active task $task");
+ $finished = 0;
+ }
+ if (my $task = $conn->next_task()) {
+ $this->log("irspy", "$conn still has a queued task $task");
+ $finished = 0;
+ }
+ if (!$conn->is_idle()) {
+ $this->log("irspy",
+ "$conn still has ZOOM-C level tasks queued: see below");
+ $finished = 0;
+ }
+ my $ev = $conn->peek_event();
+ if ($ev != 0 && $ev != ZOOM::Event::ZEND) {
+ my $evstr = ZOOM::event_str($ev);
+ $this->log("irspy", "$conn has event $ev ($evstr) waiting");
+ $finished = 0;
+ }
+ if (!$conn->option("rewrote_record")) {
+ $this->log("irspy", "$conn did not rewrite its ZeeRex record");
+ $finished = 0;