]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.db.layer0/src/org/simantics/db/layer0/StandardSessionManager.java
Some fixes for resource cleaning spreadsheets in simupedia
[simantics/platform.git] / bundles / org.simantics.db.layer0 / src / org / simantics / db / layer0 / StandardSessionManager.java
index b82860de1010b79bcaa9f31e6737f4cc7e490348..cdd8e074c404ee4d698878b37eaf7d7478c36eca 100644 (file)
@@ -4,6 +4,7 @@ import java.util.Collection;
 import java.util.concurrent.ConcurrentHashMap;
 
 import org.simantics.db.ReadGraph;
+import org.simantics.db.WriteGraph;
 import org.simantics.db.common.request.ParametrizedPrimitiveRead;
 import org.simantics.db.exception.DatabaseException;
 import org.simantics.db.layer0.variable.NodeSupport;
@@ -75,7 +76,9 @@ abstract public class StandardSessionManager<Node, Engine extends StandardEngine
         if(realm != null) {
             REALMS.put(key, realm);
         } else {
-            REALMS.remove(key);
+            StandardRealm<Node, Engine> removedRealm = REALMS.remove(key);
+            if (removedRealm != null)
+                removedRealm.close();
         }
         Listener<StandardRealm<Node,Engine>> listener = getOrDisposeListener(key);
         if(listener != null) {
@@ -104,10 +107,14 @@ abstract public class StandardSessionManager<Node, Engine extends StandardEngine
     protected abstract Engine createEngine(ReadGraph graph, String id) throws DatabaseException;
     protected abstract StandardRealm<Node,Engine> createRealm(Engine engine, String id);
     
-    public void removeRealm(String id) {
+    public void removeRealm(WriteGraph graph, String id) throws DatabaseException {
         modifyRealms(id, null);
+        // remove listeners from this realm
+        realmListeners.remove(id);
         // if node support has been created remove it as well
-        SUPPORTS.remove(id);
+        NodeSupport<Node> support = SUPPORTS.remove(id);
+        if (support != null)
+            support.dispose();
     }
     
     public Collection<String> getRealms() {