Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAndrey Loskutov2021-07-18 07:48:44 +0000
committerAndrey Loskutov2021-07-18 09:11:49 +0000
commit00d18b799e3c424eef7921d5fcec03715be68fc7 (patch)
tree3955a04d7e6b46eac93987bd77853b26da6dd2a0
parent36c12e4c31a23f7233f2d03ca0262b9b1894f39a (diff)
downloadeclipse.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>
-rw-r--r--org.eclipse.jdt.core/search/org/eclipse/jdt/internal/core/search/indexing/IndexManager.java6
-rw-r--r--org.eclipse.jdt.core/search/org/eclipse/jdt/internal/core/search/processing/JobManager.java12
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;
}
}

Back to the top