[288196] Deadlock in ModelManagerImpl after IOException
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 bdc971c..72284d7 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
@@ -330,7 +330,8 @@
 			URIResolver resolver, ReadEditType rwType, EncodingRule encodingRule,
 			SharedObject sharedObject) throws CoreException, IOException {
 		// XXX: Does not integrate with FileBuffers
-		boolean doRemove = false;
+		boolean doRemove = true;
+		try {
 		synchronized(sharedObject) {
 			InputStream inputStream = null;
 			IStructuredModel model = null;
@@ -355,16 +356,17 @@
 				// add to our cache
 				sharedObject.theSharedModel=model;
 				_initCount(sharedObject, rwType);
-			} else {
-				doRemove = true;
+				doRemove = false;
 			}
 		}
+		} finally {
 		if (doRemove) {
 			SYNC.acquire();	
 			fManagedObjects.remove(id);	
 			SYNC.release();
 		}
 		sharedObject.setLoaded();
+		}
 	}
 
 	private IStructuredModel _commonCreateModel(InputStream inputStream, String id, IModelHandler handler, URIResolver resolver, ReadEditType rwType, String encoding, String lineDelimiter) throws IOException {
@@ -416,7 +418,8 @@
 	private void _doCommonCreateModel(InputStream inputStream, String id, IModelHandler handler,
 			URIResolver resolver, ReadEditType rwType, String encoding, String lineDelimiter,
 			SharedObject sharedObject) throws IOException {
-		boolean doRemove = false;
+		boolean doRemove = true;
+		try {
 		synchronized(sharedObject) {
 			IStructuredModel model = null;
 			try {
@@ -451,10 +454,10 @@
 				}
 				sharedObject.theSharedModel = model;
 				_initCount(sharedObject, rwType);
-			} else {
-				doRemove = true;
+				doRemove = false;
 			}
 		}
+		}finally{
 		if (doRemove) {
 			SYNC.acquire();
 			// remove it if we didn't get one back
@@ -462,6 +465,7 @@
 			SYNC.release();
 		}
 		sharedObject.setLoaded();
+		}
 	}
 
 	private IStructuredModel _commonCreateModel(String id, IModelHandler handler, URIResolver resolver) throws ResourceInUse {