]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics/src/org/simantics/SimanticsPlatform.java
Move shutdown of worker pools to SimanticsPlatform.shutdown()
[simantics/platform.git] / bundles / org.simantics / src / org / simantics / SimanticsPlatform.java
index cc5a0e27022e018c78882cc5071413d44e81953a..1f367dc9abf83d63c8201a95d000145ff8f5d3fe 100644 (file)
@@ -91,6 +91,7 @@ import org.simantics.graph.db.TransferableGraphs;
 import org.simantics.graph.diff.Diff;
 import org.simantics.graph.diff.TransferableGraphDelta1;
 import org.simantics.internal.Activator;
+import org.simantics.internal.TimedSessionCache;
 import org.simantics.internal.startup.StartupExtensions;
 import org.simantics.layer0.Layer0;
 import org.simantics.operation.Layer0X;
@@ -113,6 +114,8 @@ import org.simantics.utils.FileUtils;
 import org.simantics.utils.datastructures.Pair;
 import org.simantics.utils.logging.TimeLogger;
 import org.simantics.utils.strings.EString;
+import org.simantics.utils.threads.ExecutorWorker;
+import org.simantics.utils.threads.ThreadUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -186,7 +189,6 @@ public class SimanticsPlatform implements LifecycleListener {
 
     /** Session specific bindings */
     public SimanticsBindings simanticsBindings;
-    public SimanticsBindings simanticsBindings2;
 
     public Thread mainThread;
 
@@ -864,17 +866,11 @@ public class SimanticsPlatform implements LifecycleListener {
             Simantics.setSessionContext(sessionContext);
 
             // 1. Put ResourceBinding that throws an exception to General Bindings
-            simanticsBindings = new SimanticsBindings( null );
+            simanticsBindings = new SimanticsBindings();
             Bindings.classBindingFactory.addFactory( simanticsBindings );
 
-
-            // 2. Create session-specific second Binding context (Databoard) and
-            //    put that to Session as a service
             Session session = sessionContext.getSession();
-            Databoard sessionDataboard = new Databoard();
-            session.registerService(Databoard.class, sessionDataboard);
-            simanticsBindings2 = new SimanticsBindings( session );
-            sessionDataboard.classBindingFactory.addFactory( simanticsBindings2 );
+            session.registerService(Databoard.class, Bindings.databoard);
 
             // Register datatype bindings
             Bindings.defaultBindingFactory.getRepository().put(RGB.Integer.BINDING.type(), RGB.Integer.BINDING);
@@ -980,14 +976,19 @@ public class SimanticsPlatform implements LifecycleListener {
             }
             progress.worked(10);
 
+            // NOP at the moment
+            TimedSessionCache.close();
+
+            progress.subTask("Thread pools");
+            ThreadUtils.shutdown();
+            ExecutorWorker.shutdown();
+            progress.worked(5);
+
             running = false;
             progress.subTask("Close Database Session");
-            Databoard databoard = null;
             if (sessionContext != null) {
                 Session s = sessionContext.peekSession();
                 if (s != null) {
-                    databoard = s.peekService(Databoard.class);
-
                     progress.subTask("Flushing Index Caches");
                     try {
                         Simantics.flushIndexCaches(progress.newChild(20), s);
@@ -1005,18 +1006,11 @@ public class SimanticsPlatform implements LifecycleListener {
                 Bindings.classBindingFactory.removeFactory( simanticsBindings );
                 simanticsBindings = null;
             }
-            if (databoard != null) {
-               if (simanticsBindings2 != null) {
-                       databoard.classBindingFactory.removeFactory( simanticsBindings2 );
-                       simanticsBindings2 = null;
-               }
-               databoard.clear();
-            }
 
             // Make sure Simantics clipboard doesn't store unwanted session data references.
             Simantics.setClipboard(new SimanticsClipboardImpl());
 
-            progress.worked(30);
+            progress.worked(50);
 
             session = null;
             projectResource = null;
@@ -1038,6 +1032,15 @@ public class SimanticsPlatform implements LifecycleListener {
         }
         progress.worked(10);
 
+        progress.subTask("Clear index status");
+        try {
+            // Everything ok, clear index dirty state.
+            DatabaseIndexing.clearAllDirty();
+        } catch (IOException e) {
+            LOGGER.error("Problems encountered while refreshing database index states, see exception for details.", e);
+        }
+        progress.worked(5);
+
         if (clearTemporaryFiles) {
             progress.subTask("Clearing Workspace Temporary Directory");
             try {