]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.simulator.toolkit/src/org/simantics/simulator/toolkit/DynamicExperimentThread.java
Fixed another source of deadlocks in DynamicExperimentThread.
[simantics/platform.git] / bundles / org.simantics.simulator.toolkit / src / org / simantics / simulator / toolkit / DynamicExperimentThread.java
index 66cec38a46b62664c0a5037af4d24060378730b2..9ee57f51055aec994a49d33f08726fec5a21c9ca 100644 (file)
@@ -125,7 +125,7 @@ abstract public class DynamicExperimentThread extends Thread {
                                runTasks();
                                taskTime += System.nanoTime() - asd2;
 
-                               System.err.println(" st = " + 1e-9*stepTime + " tt = " + 1e-9*taskTime);
+                               //System.err.println(" st = " + 1e-9*stepTime + " tt = " + 1e-9*taskTime);
 
                                while(obtainedRealtimeRatio > desiredRealtimeRatio) {
                                        int ran = runTasks();
@@ -138,10 +138,12 @@ abstract public class DynamicExperimentThread extends Thread {
 
                                                if(deltaNs > 0) {
                                                        synchronized(tasks) {
-                                                               try {
-                                                                       tasks.wait(deltaMs, deltaNsRem);
-                                                               } catch (InterruptedException e) {
-                                                                       e.printStackTrace();
+                                                               if (inState(StandardExperimentStates.Running.class)) {
+                                                                       try {
+                                                                               tasks.wait(deltaMs, deltaNsRem);
+                                                                       } catch (InterruptedException e) {
+                                                                               LOGGER.warn("Dynamic experiment thread '" + this.getName() + "' (" + this.getClass().getName() + ") interrupted", e);
+                                                                       }
                                                                }
                                                        }
                                                }
@@ -151,15 +153,14 @@ abstract public class DynamicExperimentThread extends Thread {
 
                        } else {
 
-                               while(!inState(StandardExperimentStates.Running.class) && inActiveState()) {
-
-                                       synchronized(tasks) {
+                               synchronized(tasks) {
+                                       while(!inState(StandardExperimentStates.Running.class) && inActiveState()) {
                                                int ran = runTasks();
                                                if(ran == 0) {
                                                        try {
                                                                tasks.wait(Integer.MAX_VALUE);
                                                        } catch (InterruptedException e) {
-                                                               e.printStackTrace();
+                                                               LOGGER.warn("Dynamic experiment thread '" + this.getName() + "' (" + this.getClass().getName() + ") interrupted", e);
                                                        }
                                                }
                                        }