X-Git-Url: https://gerrit.simantics.org/r/gitweb?a=blobdiff_plain;ds=sidebyside;f=bundles%2Forg.simantics.db.impl%2Fsrc%2Forg%2Fsimantics%2Fdb%2Fimpl%2Fquery%2FAsyncReadEntry.java;h=f409b40c8c330069023ede4686c6363ba76ae948;hb=7962363255e507efc6a7de5d47e48acb8bceb305;hp=e6d42750d37b9caf62196bd50c043b802093d7e6;hpb=277b1c7fb3fdd8effb4bf2b447358d0e4ef0e302;p=simantics%2Fplatform.git diff --git a/bundles/org.simantics.db.impl/src/org/simantics/db/impl/query/AsyncReadEntry.java b/bundles/org.simantics.db.impl/src/org/simantics/db/impl/query/AsyncReadEntry.java index e6d42750d..f409b40c8 100644 --- a/bundles/org.simantics.db.impl/src/org/simantics/db/impl/query/AsyncReadEntry.java +++ b/bundles/org.simantics.db.impl/src/org/simantics/db/impl/query/AsyncReadEntry.java @@ -13,7 +13,6 @@ package org.simantics.db.impl.query; import org.simantics.db.AsyncReadGraph; import org.simantics.db.exception.DatabaseException; -import org.simantics.db.exception.RuntimeDatabaseException; import org.simantics.db.impl.BlockingAsyncProcedure; import org.simantics.db.impl.DebugPolicy; import org.simantics.db.impl.graph.AsyncBarrierImpl; @@ -72,7 +71,7 @@ final public class AsyncReadEntry extends CacheEntryBase> i try { - BlockingAsyncProcedure proc = new BlockingAsyncProcedure<>(graph, new AsyncProcedure() { + BlockingAsyncProcedure proc = new BlockingAsyncProcedure<>(graph.asyncBarrier, graph, new AsyncProcedure() { @Override public void execute(AsyncReadGraph graph, T result) { @@ -154,10 +153,11 @@ final public class AsyncReadEntry extends CacheEntryBase> i ReadGraphImpl queryGraph = graph.withParent(entry); - BlockingAsyncProcedure proc = new BlockingAsyncProcedure<>(queryGraph, null, request); + BlockingAsyncProcedure proc = new BlockingAsyncProcedure<>(queryGraph.asyncBarrier, graph, null, request); class AsyncTask extends SessionTask { + int counter = 0; T result; DatabaseException exception; @@ -181,9 +181,21 @@ final public class AsyncReadEntry extends CacheEntryBase> i exception = dbe; } finally { if (entry != null) - entry.performFromCache(queryGraph, procedure_); + entry.performFromCache(graph, procedure_); } } else { + if(counter++ > 10000) { + AsyncBarrierImpl.printReverse(queryGraph.asyncBarrier, 2); + AsyncBarrierImpl caller = queryGraph.asyncBarrier.caller; + while(caller != null) { + System.err.println("called by " + AsyncBarrierImpl.report(caller)); + caller = caller.caller; + } + for(AsyncBarrierImpl ab : AsyncBarrierImpl.debuggerMap.keySet()) { + AsyncBarrierImpl.printReverse(ab, 2); + } + throw new IllegalStateException("Eternal loop in queries."); + } graph.processor.schedule(this); } }