[215724] Unbalanced thread locking effectively hangs workbench
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 c66a954..7c59bef 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
@@ -571,6 +571,7 @@
 				SYNC.release();
 				break;
 			} else {
+				SYNC.release();
 				sharedObject = testObject;
 			}
 		}
@@ -1040,7 +1041,7 @@
 		IStructuredModel result = null;
 		
 		SYNC.acquire();
-		Assert.isTrue(SYNC.getDepth()==1);
+		Assert.isTrue(SYNC.getDepth()==1, "depth not equal to 1");
 		// let's see if we already have it in our cache
 		SharedObject sharedObject = (SharedObject) fManagedObjects.get(id);
 		// if not, then we'll simply return null
@@ -1111,7 +1112,7 @@
 
 		Assert.isNotNull(id, "id parameter can not be null"); //$NON-NLS-1$
 		IStructuredModel result = null;
-		boolean doRealease = true;
+		boolean doRelease = true;
 		// let's see if we already have it in our cache
 		try {
 			SYNC.acquire();
@@ -1122,7 +1123,7 @@
 				// count,
 				// and return the object.
 				SYNC.release();
-				doRealease=false;
+				doRelease=false;
 				synchronized(sharedObject) {
 					if (sharedObject.doWait) {
 						sharedObject.waitForLoadAttempt();
@@ -1136,8 +1137,9 @@
 				trace("   incremented referenceCountForEdit ", id, sharedObject.referenceCountForEdit); //$NON-NLS-1$
 			}
 		} finally {
-			if (doRealease)
+			if (doRelease) {
 				SYNC.release();
+			}
 		}
 		
 		return result;
@@ -1430,13 +1432,11 @@
 			SYNC.release();
 			sharedObject.waitForLoadAttempt();
 			SYNC.acquire();
-			synchronized(sharedObject) {
+			synchronized (sharedObject) {
 				count = sharedObject.referenceCountForRead + sharedObject.referenceCountForEdit;
 			}
-			SYNC.release();
-		} else {
-			SYNC.release();
 		}
+		SYNC.release();
 		return count;
 	}
 
@@ -1471,7 +1471,7 @@
 	 *            Object The id of the model TODO: try to refine the design
 	 *            not to use this function
 	 */
-	public  int getReferenceCountForRead(Object id) {
+	public int getReferenceCountForRead(Object id) {
 		Assert.isNotNull(id, "id parameter can not be null"); //$NON-NLS-1$
 		int count = 0;
 		SYNC.acquire();
@@ -1483,10 +1483,8 @@
 			synchronized(sharedObject) {
 				count = sharedObject.referenceCountForRead;
 			}
-			SYNC.release();
-		} else {
-			SYNC.release();
 		}
+		SYNC.release();
 		return count;
 	}