diff options
author | nsandonato | 2010-07-13 14:43:03 +0000 |
---|---|---|
committer | nsandonato | 2010-07-13 14:43:03 +0000 |
commit | a2568bd6c80888e2575fc8a5c376ccaf32eedfb2 (patch) | |
tree | 5cdfd41eab2d40a842756abc799ef657c081f6d1 /bundles/org.eclipse.wst.sse.core/src/org/eclipse/wst/sse | |
parent | d3382d897cfa014ac2c9f966f5840ca397f3b4db (diff) | |
download | webtools.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.java | 35 |
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 { |