]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.db.impl/src/org/simantics/db/impl/query/QueryCollectorImpl.java
QueryListening sync is slow
[simantics/platform.git] / bundles / org.simantics.db.impl / src / org / simantics / db / impl / query / QueryCollectorImpl.java
index 965f1e39f41fb1dc4d99000d533c03dde6c21da3..0b6f6ef834411316255ac12e80f56faa3d3bdd93 100644 (file)
@@ -42,6 +42,10 @@ class QueryCollectorImpl implements QueryProcessor.QueryCollector {
        @Override
        public void collect(int youngTarget, int allowedTimeInMs) {
 
+               // Flush listener registrations to prevent the collector from trashing
+               // listeners that are still queued up waiting to be registered.
+               queryProcessor.listening.sync();
+
                long start = System.nanoTime();
 
                // Refresh current size
@@ -160,7 +164,7 @@ class QueryCollectorImpl implements QueryProcessor.QueryCollector {
                                                        }
                                                }
 
-                                               if(queryProcessor.hasListenerAfterDisposing(entry)) {
+                                               if(queryProcessor.listening.hasListenerAfterDisposing(entry)) {
                                                        if((status & CacheEntry.HAS_BEEN_BOUND) == 0) {
                                                                queryProcessor.boundQueries++;
                                                                entry.setGCStatusFlag(CacheEntry.HAS_BEEN_BOUND, true);
@@ -176,7 +180,7 @@ class QueryCollectorImpl implements QueryProcessor.QueryCollector {
        }
 
        private boolean tryCollect(CacheEntry entry) {
-               if (!queryProcessor.hasListenerAfterDisposing(entry))
+               if (!queryProcessor.listening.hasListenerAfterDisposing(entry))
                        if(entry.shouldBeCollected()) {
                                queryProcessor.removeQuery(entry);
                                support.remove();