X-Git-Url: https://gerrit.simantics.org/r/gitweb?a=blobdiff_plain;f=bundles%2Forg.simantics.db.impl%2Fsrc%2Forg%2Fsimantics%2Fdb%2Fimpl%2Fquery%2FQueryThread.java;h=7aa89b3f032ea68f08e75f1d65bd0c0e87bdc030;hb=e460fd6f0af60314e2ca28391ef7ff2043016d97;hp=ab10efa0baab252a1ff5ef8b8485c313b2b32db1;hpb=9f0fd59be54719b1fe9322d8fd37e4950857308c;p=simantics%2Fplatform.git diff --git a/bundles/org.simantics.db.impl/src/org/simantics/db/impl/query/QueryThread.java b/bundles/org.simantics.db.impl/src/org/simantics/db/impl/query/QueryThread.java index ab10efa0b..7aa89b3f0 100644 --- a/bundles/org.simantics.db.impl/src/org/simantics/db/impl/query/QueryThread.java +++ b/bundles/org.simantics.db.impl/src/org/simantics/db/impl/query/QueryThread.java @@ -22,6 +22,7 @@ class QueryThread extends Thread implements SessionThread { private Session session; private QuerySupport querySupport; private final QueryProcessor processor; + private final Semaphore requests; final private ArrayList tasks = new ArrayList(); // final private ArrayList own; @@ -54,6 +55,7 @@ class QueryThread extends Thread implements SessionThread { sleepers = processor.sleepers; querySupport = processor.querySupport; threadStates = processor.threadStates; + requests = processor.requests; // delayQueues = processor.delayQueues; // executors = processor.executors; // threadLocks = processor.threadLocks; @@ -96,11 +98,7 @@ class QueryThread extends Thread implements SessionThread { } private boolean pumpTask() { - if(!processor.freeScheduling.isEmpty()) { - tasks.add(processor.freeScheduling.removeFirst()); - return true; - } - return false; + return processor.scheduling.pumpTask(tasks); } ArrayList newTasks(boolean doWait, ArrayList tasks) { @@ -155,18 +153,7 @@ class QueryThread extends Thread implements SessionThread { threadStates[index] = ThreadState.SLEEP; - synchronized (querySupportLock) { - querySupportLock.wait(100); - - } - -// boolean woken = condition.await(10, TimeUnit.MILLISECONDS); -// if(!woken) { -// synchronized (querySupportLock) { -// if(!processor.freeScheduling.isEmpty()) -// System.err.println("some tasks are available!"); -// } -// } + requests.acquire(); sleepers.decrementAndGet(); @@ -234,8 +221,6 @@ class QueryThread extends Thread implements SessionThread { @Override public void run() { - processor.thread.set(index); - QuerySupport support = this.querySupport; try { @@ -250,23 +235,10 @@ class QueryThread extends Thread implements SessionThread { while(!tasks.isEmpty()) { SessionTask task = tasks.remove(tasks.size()-1); -// System.err.println("QT " + index + " runs " + task); - task.run(index); + task.run(0); } -// for(int performer=0;performer