Skip to content

Commit 31e7ca4

Browse files
committed
Avoid update maven project from deadlocking after...
@ConfigurationProperties quickfix
1 parent f050606 commit 31e7ca4

File tree

1 file changed

+23
-5
lines changed
  • eclipse-extensions/org.springframework.ide.eclipse.boot/src/org/springframework/ide/eclipse/boot/core/internal

1 file changed

+23
-5
lines changed

eclipse-extensions/org.springframework.ide.eclipse.boot/src/org/springframework/ide/eclipse/boot/core/internal/MavenSpringBootProject.java

Lines changed: 23 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -49,11 +49,14 @@
4949
import org.eclipse.core.resources.IContainer;
5050
import org.eclipse.core.resources.IFile;
5151
import org.eclipse.core.resources.IProject;
52+
import org.eclipse.core.resources.ResourcesPlugin;
5253
import org.eclipse.core.runtime.CoreException;
5354
import org.eclipse.core.runtime.IPath;
5455
import org.eclipse.core.runtime.IProgressMonitor;
56+
import org.eclipse.core.runtime.IStatus;
5557
import org.eclipse.core.runtime.NullProgressMonitor;
5658
import org.eclipse.core.runtime.Path;
59+
import org.eclipse.core.runtime.Status;
5760
import org.eclipse.core.runtime.SubMonitor;
5861
import org.eclipse.core.runtime.jobs.Job;
5962
import org.eclipse.debug.core.DebugPlugin;
@@ -317,11 +320,26 @@ public void process(Document pom) {
317320

318321
@Override
319322
public Job updateProjectConfiguration() {
320-
Job job = new UpdateMavenProjectJob(new IProject[] {
321-
getProject()
322-
});
323-
job.schedule();
324-
return job;
323+
//We wrap the UpdateMavenProjectJob in another job to avoid a race condition
324+
//that causes a deadlock. The race condition is avoided by have the
325+
//waitForWorkspaceLock wrapper which ensures that pending workspace jobs
326+
//are finished before triggering maven project update.
327+
//See: https://github.com/spring-projects/sts4/issues/780
328+
Job waitForWorkspaceLock = new Job("Wait for for workspace") {
329+
{
330+
setRule(ResourcesPlugin.getWorkspace().getRuleFactory().buildRule());
331+
}
332+
333+
@Override
334+
protected IStatus run(IProgressMonitor arg0) {
335+
Job job = new UpdateMavenProjectJob(new IProject[] {
336+
getProject()
337+
});
338+
job.schedule();
339+
return Status.OK_STATUS;
340+
}
341+
};
342+
return waitForWorkspaceLock;
325343
}
326344

327345
@Override

0 commit comments

Comments
 (0)