- @Override
- public void run(int thread) {
- if(needsToBlock) proc.waitBarrier();
- if(proc.isDone()) {
- try {
- result = (T)proc.get();
- if(procedure != null) procedure.execute(graph, result);
- } catch (DatabaseException e) {
- if(procedure != null) procedure.exception(graph, e);
- exception = e;
- } catch (Throwable t) {
- DatabaseException dbe = new DatabaseException(t);
- if(procedure != null) procedure.exception(graph, dbe);
- exception = dbe;
- } finally {
- if (entry != null)
- 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);
- }
- }
-