]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.db.impl/src/org/simantics/db/impl/query/AsyncReadEntry.java
Fixed asynchronous recompute problems
[simantics/platform.git] / bundles / org.simantics.db.impl / src / org / simantics / db / impl / query / AsyncReadEntry.java
index 8e6cbd145a78d9a1aacf3b99f20c396a789beaae..75169d02e9946ca0a1dea3f1e03a3dba2ce49b97 100644 (file)
@@ -12,6 +12,7 @@
 package org.simantics.db.impl.query;
 
 import org.simantics.db.AsyncReadGraph;
+import org.simantics.db.common.GraphSemaphore;
 import org.simantics.db.exception.DatabaseException;
 import org.simantics.db.impl.DebugPolicy;
 import org.simantics.db.impl.graph.ReadGraphImpl;
@@ -45,6 +46,8 @@ final public class AsyncReadEntry<T> extends CacheEntryBase<AsyncProcedure<T>> {
     
     final public void addOrSet(AsyncReadGraph graph, Object item) {
 
+//     System.err.println("addOrSet " + request + " " + Thread.currentThread() + " " + item);
+       
        assert(isPending());
 
         synchronized(this) {
@@ -76,20 +79,26 @@ final public class AsyncReadEntry<T> extends CacheEntryBase<AsyncProcedure<T>> {
 
                                try {
 
+                                       GraphSemaphore s = new GraphSemaphore(graph, 0);
+                                       
                                    request.perform(graph , new AsyncProcedure<T>() {
 
                         @Override
                         public void execute(AsyncReadGraph graph, T result) {
                             addOrSet(graph, result);
+                            s.release();
                         }
                                
                                @Override
                                public void exception(AsyncReadGraph graph, Throwable t) {
                                    except(t);
+                            s.release();
                         }
 
                     });
 
+                    s.waitFor(1);
+
                                } catch (Throwable t) {
                                    except(t);
                 }
@@ -142,7 +151,7 @@ final public class AsyncReadEntry<T> extends CacheEntryBase<AsyncProcedure<T>> {
            
        }
 
-    @Override
+    //@Override
     public Object compute(ReadGraphImpl graph, AsyncProcedure<T> procedure) throws DatabaseException {
 
        ReadGraphImpl queryGraph = graph.withParent(this);