public void runInternal()

in harry-core/src/harry/runner/Runner.java [267:291]


        public void runInternal() throws Throwable
        {
            List<Interruptible> threads = new ArrayList<>();
            WaitQueue queue = WaitQueue.newWaitQueue();
            WaitQueue.Signal interrupt = queue.register();

            for (Configuration.VisitorPoolConfiguration poolConfiguration : poolConfigurations)
            {
                for (int i = 0; i < poolConfiguration.concurrency; i++)
                {
                    Visitor visitor = poolConfiguration.visitor.make(run);
                    String name = String.format("%s-%d", poolConfiguration.prefix, i + 1);
                    Interruptible thread = ExecutorFactory.Global.executorFactory().infiniteLoop(name, wrapInterrupt((state) -> {
                        if (state == Interruptible.State.NORMAL)
                            visitor.visit();
                    }, interrupt::signal, errors::add), SAFE, NON_DAEMON, UNSYNCHRONIZED);
                    threads.add(thread);
                }
            }

            interrupt.await(runtime, runtimeUnit);
            shutdown(threads::stream);
            if (!errors.isEmpty())
                throw merge(errors);
        }