[511793] Deadlock DependencyGraphImpl and 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 422e468..e85e904 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
@@ -202,23 +202,25 @@
}
public IVirtualComponent createComponent(IProject project) {
- IVirtualComponent retVal = null;
- // acquire the lock that StructureEdit will need already, to prevent others from locking that before calling createComponent() - see bug 508685
+ return createComponent(project, true);
+ }
+
+ public IVirtualComponent createComponent(IProject project, boolean checkSettings) {
+ // acquire the lock that StructureEdit will need already, to prevent others from locking that before calling createComponent() - see bug 508685 and bug 511793
ILock lock = EMFWorkbenchEditContextFactory.getProjectLockObject(project);
try{
if(null != lock){
lock.acquire();
}
- retVal = createComponent(project, true);
+ return createComponentSynchronously(project, checkSettings);
} finally{
if(null != lock){
lock.release();
}
}
- return retVal;
}
- public synchronized IVirtualComponent createComponent(IProject project, boolean checkSettings) {
+ private synchronized IVirtualComponent createComponentSynchronously(IProject project, boolean checkSettings) {
try {
IVirtualComponent component = ComponentCacheManager.instance().getComponent(project);
if(component != null) {