Skip to main content

This CGIT instance is deprecated, and repositories have been moved to Gitlab or Github. See the repository descriptions for specific locations.

summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authornsandonato2010-07-13 14:43:03 +0000
committernsandonato2010-07-13 14:43:03 +0000
commita2568bd6c80888e2575fc8a5c376ccaf32eedfb2 (patch)
tree5cdfd41eab2d40a842756abc799ef657c081f6d1 /bundles/org.eclipse.wst.sse.core/src/org/eclipse/wst/sse
parentd3382d897cfa014ac2c9f966f5840ca397f3b4db (diff)
downloadwebtools.sourceediting-a2568bd6c80888e2575fc8a5c376ccaf32eedfb2.tar.gz
webtools.sourceediting-a2568bd6c80888e2575fc8a5c376ccaf32eedfb2.tar.xz
webtools.sourceediting-a2568bd6c80888e2575fc8a5c376ccaf32eedfb2.zip
[319400] Deadlock in ModelManager due to unhandled exception
Diffstat (limited to 'bundles/org.eclipse.wst.sse.core/src/org/eclipse/wst/sse')
-rw-r--r--bundles/org.eclipse.wst.sse.core/src/org/eclipse/wst/sse/core/internal/model/ModelManagerImpl.java35
1 files changed, 22 insertions, 13 deletions
diff --git a/bundles/org.eclipse.wst.sse.core/src/org/eclipse/wst/sse/core/internal/model/ModelManagerImpl.java b/bundles/org.eclipse.wst.sse.core/src/org/eclipse/wst/sse/core/internal/model/ModelManagerImpl.java
index b337b7604b..09a96e1215 100644
--- a/bundles/org.eclipse.wst.sse.core/src/org/eclipse/wst/sse/core/internal/model/ModelManagerImpl.java
+++ b/bundles/org.eclipse.wst.sse.core/src/org/eclipse/wst/sse/core/internal/model/ModelManagerImpl.java
@@ -536,22 +536,31 @@ public class ModelManagerImpl implements IModelManager {
private void _doCommonGetModel(IFile file, String id, SharedObject sharedObject,ReadEditType rwType) {
boolean doRemove = true;
- synchronized(sharedObject) {
- sharedObject.doWait=false;
- IStructuredModel model = FileBufferModelManager.getInstance().getModel(file);
- sharedObject.doWait=true;
- if (model != null) {
- sharedObject.theSharedModel=model;
- _initCount(sharedObject, rwType);
- doRemove = false;
+ try {
+ synchronized(sharedObject) {
+ sharedObject.doWait=false;
+ IStructuredModel model = null;
+ try {
+ model = FileBufferModelManager.getInstance().getModel(file);
+ }
+ finally {
+ sharedObject.doWait=true;
+ }
+ if (model != null) {
+ sharedObject.theSharedModel=model;
+ _initCount(sharedObject, rwType);
+ doRemove = false;
+ }
}
}
- if (doRemove) {
- SYNC.acquire();
- fManagedObjects.remove(id);
- SYNC.release();
+ finally {
+ if (doRemove) {
+ SYNC.acquire();
+ fManagedObjects.remove(id);
+ SYNC.release();
+ }
+ sharedObject.setLoaded();
}
- sharedObject.setLoaded();
}
private SharedObject _commonNewModel(IFile iFile, boolean force) throws ResourceAlreadyExists, ResourceInUse, IOException, CoreException {

Back to the top