diff --git a/src/main/java/teetime/framework/DynamicActuator.java b/src/main/java/teetime/framework/DynamicActuator.java index 2cb2423ca30962a9940094ab9cb36093e0ef3f44..ee63f6d6b4cef526af20995fe2207b0dcd91acef 100644 --- a/src/main/java/teetime/framework/DynamicActuator.java +++ b/src/main/java/teetime/framework/DynamicActuator.java @@ -15,6 +15,7 @@ */ package teetime.framework; +import teetime.util.framework.concurrent.SignalingCounter; public class DynamicActuator { @@ -30,10 +31,14 @@ public class DynamicActuator { } public Runnable startWithinNewThread(final Stage previousStage, final Stage stage) { - // SignalingCounter runtimeCounter = previousStage.owningContext.getThreadService().getRunnableCounter(); - // SignalingCounter newCounter = stage.owningContext.getThreadService().getRunnableCounter(); + SignalingCounter runtimeCounter = previousStage.owningContext.getThreadService().getRunnableCounter(); + SignalingCounter newCounter = stage.owningContext.getThreadService().getRunnableCounter(); // runtimeCounter.inc(newCounter); + // stage.logger.error(stage.owningContext.getThreadService().getRunnableCounter().toString()); + + // !!! stage.owningContext = XXX.owningContext !!! + Runnable runnable = wrap(stage); Thread thread = new Thread(runnable); @@ -42,6 +47,10 @@ public class DynamicActuator { thread.start(); + // requirements: + // 1. all new threads from stage must be known to the global context + // 2. number of active threads must be increased by the stage + if (runnable instanceof RunnableConsumerStage) { // do nothing } else if (runnable instanceof RunnableProducerStage) { diff --git a/src/main/java/teetime/util/framework/concurrent/SignalingCounter.java b/src/main/java/teetime/util/framework/concurrent/SignalingCounter.java index 64deae6a6168edaf34244ba643b929805ea14756..3a418506ebcd43b3aac0fe35188020d26594e03c 100644 --- a/src/main/java/teetime/util/framework/concurrent/SignalingCounter.java +++ b/src/main/java/teetime/util/framework/concurrent/SignalingCounter.java @@ -65,4 +65,9 @@ public class SignalingCounter { counter += otherCounter.counter; conditionalNotifyAll(counter); } + + @Override + public String toString() { + return "counter: " + counter + ", " + super.toString(); + } }