[319400] Deadlock in ModelManager due to unhandled exception
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 b337b76..09a96e1 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 @@ 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 {