diff options
author | Andrey Loskutov | 2021-07-18 07:48:44 +0000 |
---|---|---|
committer | Andrey Loskutov | 2021-07-18 09:11:49 +0000 |
commit | 00d18b799e3c424eef7921d5fcec03715be68fc7 (patch) | |
tree | 3955a04d7e6b46eac93987bd77853b26da6dd2a0 | |
parent | 36c12e4c31a23f7233f2d03ca0262b9b1894f39a (diff) | |
download | eclipse.jdt.core-00d18b799e3c424eef7921d5fcec03715be68fc7.tar.gz eclipse.jdt.core-00d18b799e3c424eef7921d5fcec03715be68fc7.tar.xz eclipse.jdt.core-00d18b799e3c424eef7921d5fcec03715be68fc7.zip |
Bug 574903 - fixed index saving / waiting for first job
Change-Id: I461c84d4a24eeff3041f1e9b30b5b6a9e8abe94e
Signed-off-by: Andrey Loskutov <loskutov@gmx.de>
Reviewed-on: https://git.eclipse.org/r/c/jdt/eclipse.jdt.core/+/183143
Tested-by: JDT Bot <jdt-bot@eclipse.org>
2 files changed, 15 insertions, 3 deletions
diff --git a/org.eclipse.jdt.core/search/org/eclipse/jdt/internal/core/search/indexing/IndexManager.java b/org.eclipse.jdt.core/search/org/eclipse/jdt/internal/core/search/indexing/IndexManager.java index f1424b58c7..76c1addb24 100644 --- a/org.eclipse.jdt.core/search/org/eclipse/jdt/internal/core/search/indexing/IndexManager.java +++ b/org.eclipse.jdt.core/search/org/eclipse/jdt/internal/core/search/indexing/IndexManager.java @@ -1116,9 +1116,13 @@ public void saveIndex(Index index) throws IOException { if (this.awaitingJobs.size() > 1) { // Start at the end and go backwards ListIterator<IJob> iterator = this.awaitingJobs.listIterator(this.awaitingJobs.size()); - // don't check first job, as it may have already started + IJob first = this.awaitingJobs.get(0); while (iterator.hasPrevious()) { IJob job = iterator.previous(); + // don't check first job, as it may have already started + if(job == first) { + break; + } if (job instanceof IndexRequest) { if (((IndexRequest) job).containerPath.equals(containerPath)) { return; diff --git a/org.eclipse.jdt.core/search/org/eclipse/jdt/internal/core/search/processing/JobManager.java b/org.eclipse.jdt.core/search/org/eclipse/jdt/internal/core/search/processing/JobManager.java index db40d2bcf8..24795d9a4e 100644 --- a/org.eclipse.jdt.core/search/org/eclipse/jdt/internal/core/search/processing/JobManager.java +++ b/org.eclipse.jdt.core/search/org/eclipse/jdt/internal/core/search/processing/JobManager.java @@ -141,11 +141,19 @@ public abstract class JobManager implements Runnable { notifyAll(); // wake up the background thread if it is waiting (context must be synchronized) } protected synchronized boolean isJobWaiting(IJob request) { + if(this.awaitingJobs.size() <= 1) { + return false; + } // Start at the end and go backwards ListIterator<IJob> iterator = this.awaitingJobs.listIterator(this.awaitingJobs.size()); - // don't check first job, as it may have already started + IJob first = this.awaitingJobs.get(0); while (iterator.hasPrevious()) { - if (request.equals(iterator.previous())) { + IJob job = iterator.previous(); + // don't check first job, as it may have already started + if(job == first) { + break; + } + if (request.equals(job)) { return true; } } |