[292518] Fix deadlock introduced by bug 290701
diff --git a/features/org.eclipse.wst.common_core.feature.patch/buildnotes_org.eclipse.wst.common_core.feature.patch.html b/features/org.eclipse.wst.common_core.feature.patch/buildnotes_org.eclipse.wst.common_core.feature.patch.html
index aa1589a..39e6a5d 100644
--- a/features/org.eclipse.wst.common_core.feature.patch/buildnotes_org.eclipse.wst.common_core.feature.patch.html
+++ b/features/org.eclipse.wst.common_core.feature.patch/buildnotes_org.eclipse.wst.common_core.feature.patch.html
@@ -23,5 +23,6 @@
<p>Bug <a href='https://bugs.eclipse.org/290701'>290701</a>. IResource.IsSynchronized calls are slow in large workspaces</p>
<p>Bug <a href='https://bugs.eclipse.org/290727'>290727</a>. ProjectResourceSetImpl throwing concurrent access errors</p>
<p>Bug <a href='https://bugs.eclipse.org/291266'>291266</a>. Deleting java source folders should remove the corresponding artifacts from the .settings/org.eclipse.wst.common.component file</p>
+<p>Bug <a href='https://bugs.eclipse.org/292518'>292518</a>. Fix deadlock introduced by bug 290701</p>
</body>
</html>
\ No newline at end of file
diff --git a/features/org.eclipse.wst.common_core.feature.patch/feature.properties b/features/org.eclipse.wst.common_core.feature.patch/feature.properties
index 20e6ff4..0593d85 100644
--- a/features/org.eclipse.wst.common_core.feature.patch/feature.properties
+++ b/features/org.eclipse.wst.common_core.feature.patch/feature.properties
@@ -37,6 +37,7 @@
Bug https://bugs.eclipse.org/290701 IResource.IsSynchronized calls are slow in large workspaces\n\
Bug https://bugs.eclipse.org/290727 ProjectResourceSetImpl throwing concurrent access errors\n\
Bug https://bugs.eclipse.org/291266 Deleting java source folders should remove the corresponding artifacts from the .settings/org.eclipse.wst.common.component file\n\
+Bug https://bugs.eclipse.org/292518 Fix deadlock introduced by bug 290701\n\
\n\
# "copyright" property - text of the "Feature Update Copyright"
copyright=\
diff --git a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/ModuleStructuralModel.java b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/ModuleStructuralModel.java
index 1270d0c..3037626 100644
--- a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/ModuleStructuralModel.java
+++ b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/ModuleStructuralModel.java
@@ -275,24 +275,29 @@
}
return getProject().getFile(StructureEdit.MODULE_META_FILE_NAME);
}
+
private void checkSync(IFile compFile) {
- synchronized(needsSync) {
- if (needsSync.booleanValue()) { //Only check sync once for life of this model
- if (!compFile.isSynchronized(IResource.DEPTH_ONE)) {
- File iofile = compFile.getFullPath().toFile();
- if (iofile.exists() || compFile.exists()) {
- IWorkspaceRoot root = ResourcesPlugin.getWorkspace().getRoot();
- try {
- //OK wait to get workspace root before refreshing
- Job.getJobManager().beginRule(root, null);
- compFile.refreshLocal(IResource.DEPTH_ONE, null);
- } catch (CoreException ce) {
- //ignore
- } finally {
- Job.getJobManager().endRule(root);
- }
- }
+ boolean localNeedsSync = false;
+ synchronized (needsSync) {
+ localNeedsSync = needsSync;
+ }
+ if (localNeedsSync) { // Only check sync once for life of this model
+ if (!compFile.isSynchronized(IResource.DEPTH_ONE)) {
+ File iofile = compFile.getFullPath().toFile();
+ if (iofile.exists() || compFile.exists()) {
+ IWorkspaceRoot root = ResourcesPlugin.getWorkspace().getRoot();
+ try {
+ // OK wait to get workspace root before refreshing
+ Job.getJobManager().beginRule(root, null);
+ compFile.refreshLocal(IResource.DEPTH_ONE, null);
+ } catch (CoreException ce) {
+ // ignore
+ } finally {
+ Job.getJobManager().endRule(root);
+ }
}
+ }
+ synchronized (needsSync) {
needsSync = new Boolean(false);
}
}