[508685] Deadlock between DependencyGraph and StructureEdit
diff --git a/features/org.eclipse.wst.common_core.feature/feature.xml b/features/org.eclipse.wst.common_core.feature/feature.xml
index 336d300..64ffaac 100644
--- a/features/org.eclipse.wst.common_core.feature/feature.xml
+++ b/features/org.eclipse.wst.common_core.feature/feature.xml
@@ -2,7 +2,7 @@
 <feature

       id="org.eclipse.wst.common_core.feature"

       label="%featureName"

-      version="3.7.1.qualifier"

+      version="3.8.2.qualifier"

       provider-name="%providerName"

       license-feature="org.eclipse.license"

       license-feature-version="1.0.1.qualifier">

diff --git a/features/org.eclipse.wst.common_core.feature/pom.xml b/features/org.eclipse.wst.common_core.feature/pom.xml
index c01c86a..6893bd4 100644
--- a/features/org.eclipse.wst.common_core.feature/pom.xml
+++ b/features/org.eclipse.wst.common_core.feature/pom.xml
@@ -22,7 +22,7 @@
 

   <groupId>org.eclipse.webtools.common</groupId>

   <artifactId>org.eclipse.wst.common_core.feature</artifactId>

-  <version>3.7.1-SNAPSHOT</version>

+  <version>3.8.2-SNAPSHOT</version>

   <packaging>eclipse-feature</packaging>

 

   <build>

diff --git a/plugins/org.eclipse.wst.common.modulecore/META-INF/MANIFEST.MF b/plugins/org.eclipse.wst.common.modulecore/META-INF/MANIFEST.MF
index e7896d6..2f65d9a 100644
--- a/plugins/org.eclipse.wst.common.modulecore/META-INF/MANIFEST.MF
+++ b/plugins/org.eclipse.wst.common.modulecore/META-INF/MANIFEST.MF
@@ -3,7 +3,7 @@
 Bundle-Name: %Bundle-Name.0
 Bundle-Vendor: %provider
 Bundle-SymbolicName: org.eclipse.wst.common.modulecore; singleton:=true
-Bundle-Version: 1.2.401.qualifier
+Bundle-Version: 1.2.500.qualifier
 Bundle-Activator: org.eclipse.wst.common.componentcore.internal.ModulecorePlugin
 Bundle-Localization: plugin
 Export-Package: org.eclipse.wst.common.componentcore,
diff --git a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/util/ComponentImplManager.java b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/util/ComponentImplManager.java
index 58f80d4..422e468 100644
--- a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/util/ComponentImplManager.java
+++ b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/util/ComponentImplManager.java
@@ -25,6 +25,7 @@
 import org.eclipse.core.runtime.ISafeRunnable;
 import org.eclipse.core.runtime.Path;
 import org.eclipse.core.runtime.SafeRunner;
+import org.eclipse.core.runtime.jobs.ILock;
 import org.eclipse.jem.util.RegistryReader;
 import org.eclipse.jem.util.emf.workbench.ISynchronizerExtender;
 import org.eclipse.jem.util.emf.workbench.ProjectResourceSet;
@@ -37,6 +38,7 @@
 import org.eclipse.wst.common.componentcore.internal.resources.VirtualFolder;
 import org.eclipse.wst.common.componentcore.resources.IVirtualComponent;
 import org.eclipse.wst.common.componentcore.resources.IVirtualFolder;
+import org.eclipse.wst.common.internal.emfworkbench.edit.EMFWorkbenchEditContextFactory;
 import org.eclipse.wst.common.project.facet.core.IFacetedProject;
 import org.eclipse.wst.common.project.facet.core.IProjectFacet;
 import org.eclipse.wst.common.project.facet.core.IProjectFacetVersion;
@@ -200,7 +202,20 @@
 	}
 
 	public IVirtualComponent createComponent(IProject project) {
-		return createComponent(project, true);
+		IVirtualComponent retVal = null;
+		// acquire the lock that StructureEdit will need already, to prevent others from locking that before calling createComponent() - see bug 508685
+		ILock lock = EMFWorkbenchEditContextFactory.getProjectLockObject(project);
+		try{
+			if(null != lock){
+				lock.acquire();
+			}
+			retVal = createComponent(project, true);
+		} finally{
+			if(null != lock){
+				lock.release();
+			}
+		}
+		return retVal;
 	}
 
 	public synchronized IVirtualComponent createComponent(IProject project, boolean checkSettings) {
diff --git a/plugins/org.eclipse.wst.common.modulecore/pom.xml b/plugins/org.eclipse.wst.common.modulecore/pom.xml
index b6291f8..9baa78c 100644
--- a/plugins/org.eclipse.wst.common.modulecore/pom.xml
+++ b/plugins/org.eclipse.wst.common.modulecore/pom.xml
@@ -22,6 +22,6 @@
 

   <groupId>org.eclipse.webtools.common</groupId>

   <artifactId>org.eclipse.wst.common.modulecore</artifactId>

-  <version>1.2.401-SNAPSHOT</version>

+  <version>1.2.500-SNAPSHOT</version>

   <packaging>eclipse-plugin</packaging>

-</project>

+</project>
\ No newline at end of file