]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.modeling/src/org/simantics/modeling/scl/GraphModuleSourceRepository.java
Fixed memory leaks of SCL module listening systems
[simantics/platform.git] / bundles / org.simantics.modeling / src / org / simantics / modeling / scl / GraphModuleSourceRepository.java
index 10a217b9da073918575c19bacf98f2925619688e..07af09e557109046575ee8556abf20c5cca6ec84 100644 (file)
@@ -16,12 +16,13 @@ import org.simantics.db.request.Read;
 import org.simantics.layer0.Layer0;
 import org.simantics.modeling.ModelingUtils;
 import org.simantics.scl.compiler.module.repository.UpdateListener;
+import org.simantics.scl.compiler.module.repository.UpdateListener.Observable;
 import org.simantics.scl.compiler.source.ModuleSource;
 import org.simantics.scl.compiler.source.StringModuleSource;
 import org.simantics.scl.compiler.source.repository.ModuleSourceRepository;
 import org.simantics.scl.runtime.SCLContext;
-import org.simantics.structural2.utils.StructuralUtils;
 import org.simantics.scl.runtime.tuple.Tuple0;
+import org.simantics.structural2.utils.StructuralUtils;
 
 import gnu.trove.procedure.TObjectProcedure;
 import gnu.trove.set.hash.THashSet;
@@ -54,15 +55,20 @@ public enum GraphModuleSourceRepository implements ModuleSourceRepository {
         }
     }
 
-    static class ModuleListener implements SyncListener<ModuleSource> {
+    static class ModuleListener implements SyncListener<ModuleSource>, Observable {
         UpdateListener listener;
         boolean alreadyExecutedOnce;
         final String moduleName;
         public ModuleListener(UpdateListener listener, String moduleName) {
             this.listener = listener;
+            this.listener.addObservable(this);
             this.moduleName = moduleName;
         }
         @Override
+        public void removeListener(UpdateListener listener) {
+            listener = null;
+        }
+        @Override
         public boolean isDisposed() {
             return listener == null;
         }