From b49e842ee29ece9ef25fe4db6af71fcfb2a26ea0 Mon Sep 17 00:00:00 2001
From: rschoene <rene.schoene@tu-dresden.de>
Date: Thu, 14 Jun 2018 17:39:39 +0200
Subject: [PATCH] Wait for the forked process at mosst double amount of the
 timeout, then kill it.

---
 .../inf/st/mquat/benchmark/FullBenchmarkMain.java  | 14 +++++++++++++-
 1 file changed, 13 insertions(+), 1 deletion(-)

diff --git a/jastadd-mquat-benchmark/src/main/java/de/tudresden/inf/st/mquat/benchmark/FullBenchmarkMain.java b/jastadd-mquat-benchmark/src/main/java/de/tudresden/inf/st/mquat/benchmark/FullBenchmarkMain.java
index 40d0bc7..805ff1a 100644
--- a/jastadd-mquat-benchmark/src/main/java/de/tudresden/inf/st/mquat/benchmark/FullBenchmarkMain.java
+++ b/jastadd-mquat-benchmark/src/main/java/de/tudresden/inf/st/mquat/benchmark/FullBenchmarkMain.java
@@ -16,6 +16,7 @@ import java.io.IOException;
 import java.nio.file.Files;
 import java.nio.file.Path;
 import java.util.*;
+import java.util.concurrent.TimeUnit;
 import java.util.stream.Collectors;
 
 /**
@@ -88,7 +89,18 @@ public class FullBenchmarkMain {
               pb.redirectError(ProcessBuilder.Redirect.INHERIT);
               pb.directory(currentDir);
               Process p = pb.start();
-              p.waitFor();
+              boolean finishedInTime = p.waitFor(settings.basic.timeoutValue * 2,
+                  TimeUnit.valueOf(settings.basic.timeoutUnit));
+              if(!finishedInTime) {
+                p.destroy();
+                p.destroyForcibly();
+                // wait for the process to actually end
+                p.waitFor();
+                // skip remaining repetitions, as this timeout is considered as an error
+                if (settings.skipOnError) {
+                  continue nextSolver;
+                }
+              }
             } catch (IOException | InterruptedException e) {
               e.printStackTrace();
               if (settings.skipOnError) {
-- 
GitLab