diff --git a/src/main/java/teetime/framework/DynamicActuator.java b/src/main/java/teetime/framework/DynamicActuator.java index acc8e99013e237cc05f366de2d8637613086d5b3..a50814d2993d7e6decf5c6bb6937664004ac51d2 100644 --- a/src/main/java/teetime/framework/DynamicActuator.java +++ b/src/main/java/teetime/framework/DynamicActuator.java @@ -31,6 +31,10 @@ public class DynamicActuator { public Runnable startWithinNewThread(final Stage stage) { Runnable runnable = wrap(stage); Thread thread = new Thread(runnable); + + stage.setOwningThread(thread); + stage.setExceptionHandler(null); + thread.start(); return runnable; } diff --git a/src/main/java/teetime/framework/ThreadService.java b/src/main/java/teetime/framework/ThreadService.java index c703d68c68061c6e351b1cefe7c40ab6f1befd92..913d15bbd7642354677efa58dd4a9c65b9aa6667 100644 --- a/src/main/java/teetime/framework/ThreadService.java +++ b/src/main/java/teetime/framework/ThreadService.java @@ -206,7 +206,8 @@ class ThreadService extends AbstractService<ThreadService> { @Override void merge(final ThreadService source) { - this.getThreadableStages().putAll(source.getThreadableStages()); + threadableStages.putAll(source.getThreadableStages()); + runnableCounter.inc(source.runnableCounter); } SignalingCounter getRunnableCounter() { diff --git a/src/main/java/teetime/util/framework/concurrent/SignalingCounter.java b/src/main/java/teetime/util/framework/concurrent/SignalingCounter.java index 31a9775dbfef2de71245b20a717fad48b551b744..64deae6a6168edaf34244ba643b929805ea14756 100644 --- a/src/main/java/teetime/util/framework/concurrent/SignalingCounter.java +++ b/src/main/java/teetime/util/framework/concurrent/SignalingCounter.java @@ -60,4 +60,9 @@ public class SignalingCounter { } } } + + public synchronized void inc(final SignalingCounter otherCounter) { + counter += otherCounter.counter; + conditionalNotifyAll(counter); + } }