X-Git-Url: https://gerrit.simantics.org/r/gitweb?a=blobdiff_plain;f=bundles%2Forg.simantics%2Fsrc%2Forg%2Fsimantics%2FSimanticsPlatform.java;h=1f367dc9abf83d63c8201a95d000145ff8f5d3fe;hb=502db54a267e8583aef1f57120ddc9ac162fbba9;hp=cc5a0e27022e018c78882cc5071413d44e81953a;hpb=d1a6b5ddc380e5e34cbb8a884f85c4d660956ff5;p=simantics%2Fplatform.git diff --git a/bundles/org.simantics/src/org/simantics/SimanticsPlatform.java b/bundles/org.simantics/src/org/simantics/SimanticsPlatform.java index cc5a0e270..1f367dc9a 100644 --- a/bundles/org.simantics/src/org/simantics/SimanticsPlatform.java +++ b/bundles/org.simantics/src/org/simantics/SimanticsPlatform.java @@ -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 {