[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