[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);
 			}
 		}