From ff7e6e9db6aa558c7dded54e5a427c4a888afd72 Mon Sep 17 00:00:00 2001
From: Nelson Tavares de Sousa <ntd@informatik.uni-kiel.de>
Date: Thu, 16 Apr 2015 16:59:04 +0200
Subject: [PATCH] added check whether the following stage is terminated on
 adding elements to a full pipe

---
 src/main/java/teetime/framework/pipe/SpScPipe.java | 6 +++++-
 1 file changed, 5 insertions(+), 1 deletion(-)

diff --git a/src/main/java/teetime/framework/pipe/SpScPipe.java b/src/main/java/teetime/framework/pipe/SpScPipe.java
index 3160d38b..bf28520d 100644
--- a/src/main/java/teetime/framework/pipe/SpScPipe.java
+++ b/src/main/java/teetime/framework/pipe/SpScPipe.java
@@ -18,6 +18,7 @@ package teetime.framework.pipe;
 import teetime.framework.AbstractInterThreadPipe;
 import teetime.framework.InputPort;
 import teetime.framework.OutputPort;
+import teetime.framework.StageState;
 import teetime.util.concurrent.queue.ObservableSpScArrayQueue;
 
 public final class SpScPipe extends AbstractInterThreadPipe implements IMonitorablePipe {
@@ -44,8 +45,11 @@ public final class SpScPipe extends AbstractInterThreadPipe implements IMonitora
 	public boolean add(final Object element) {
 		// BETTER introduce a QueueIsFullStrategy
 		while (!this.queue.offer(element)) {
-			this.numWaits++;
 			// Thread.yield();
+			if (this.cachedTargetStage.getCurrentState() == StageState.TERMINATED) {
+				return false;
+			}
+			this.numWaits++;
 			try {
 				Thread.sleep(1);
 			} catch (InterruptedException e) {
-- 
GitLab