From a37b7d6efdabe41521bd1a7d08b753b512110bcf Mon Sep 17 00:00:00 2001
From: Nelson Tavares de Sousa <stu103017@mail.uni-kiel.de>
Date: Fri, 7 Aug 2015 14:21:40 +0200
Subject: [PATCH] fixed bug which caused an interrupt upon correct termination

---
 src/main/java/teetime/framework/AbstractRunnableStage.java | 2 +-
 src/main/java/teetime/framework/AbstractStage.java         | 7 ++++++-
 src/main/java/teetime/framework/Stage.java                 | 2 ++
 src/main/java/teetime/framework/ThreadService.java         | 2 +-
 src/test/java/teetime/framework/TerminationTest.java       | 3 +++
 5 files changed, 13 insertions(+), 3 deletions(-)

diff --git a/src/main/java/teetime/framework/AbstractRunnableStage.java b/src/main/java/teetime/framework/AbstractRunnableStage.java
index 2739161a..6a602321 100644
--- a/src/main/java/teetime/framework/AbstractRunnableStage.java
+++ b/src/main/java/teetime/framework/AbstractRunnableStage.java
@@ -53,7 +53,7 @@ abstract class AbstractRunnableStage implements Runnable {
 						executeStage();
 					}
 				} catch (TerminateException e) {
-					this.stage.terminate();
+					this.stage.abort();
 					stage.getOwningContext().abortConfigurationRun();
 				} finally {
 					afterStageExecution();
diff --git a/src/main/java/teetime/framework/AbstractStage.java b/src/main/java/teetime/framework/AbstractStage.java
index da814420..6a6769ca 100644
--- a/src/main/java/teetime/framework/AbstractStage.java
+++ b/src/main/java/teetime/framework/AbstractStage.java
@@ -254,9 +254,14 @@ public abstract class AbstractStage extends Stage {
 	@Override
 	protected void terminate() {
 		changeState(StageState.TERMINATING);
-		getOwningThread().interrupt();
 	}
 
+	@Override
+	protected void abort() {
+		this.terminate();
+		this.getOwningThread().interrupt();
+	};
+
 	@Override
 	protected boolean shouldBeTerminated() {
 		return (getCurrentState() == StageState.TERMINATING);
diff --git a/src/main/java/teetime/framework/Stage.java b/src/main/java/teetime/framework/Stage.java
index ae33ba66..4cc0cf76 100644
--- a/src/main/java/teetime/framework/Stage.java
+++ b/src/main/java/teetime/framework/Stage.java
@@ -134,6 +134,8 @@ public abstract class Stage {
 
 	protected abstract void terminate();
 
+	protected abstract void abort();
+
 	protected abstract boolean shouldBeTerminated();
 
 	public abstract StageState getCurrentState();
diff --git a/src/main/java/teetime/framework/ThreadService.java b/src/main/java/teetime/framework/ThreadService.java
index de097190..4528ed5c 100644
--- a/src/main/java/teetime/framework/ThreadService.java
+++ b/src/main/java/teetime/framework/ThreadService.java
@@ -149,7 +149,7 @@ class ThreadService extends AbstractService<ThreadService> {
 	private void abortStages(final Set<Stage> currentTreadableStages) {
 		synchronized (currentTreadableStages) {
 			for (Stage stage : currentTreadableStages) {
-				stage.terminate();
+				stage.abort();
 			}
 		}
 	}
diff --git a/src/test/java/teetime/framework/TerminationTest.java b/src/test/java/teetime/framework/TerminationTest.java
index 10d00f1c..ac876760 100644
--- a/src/test/java/teetime/framework/TerminationTest.java
+++ b/src/test/java/teetime/framework/TerminationTest.java
@@ -94,6 +94,9 @@ public class TerminationTest {
 		@Override
 		protected void terminate() {}
 
+		@Override
+		protected void abort() {}
+
 	}
 
 	private class Propagator extends AbstractConsumerStage<Integer> {
-- 
GitLab