[286990] - ModelManagerImpl calls FileBufferModelManager.connect without checking for null
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 4dedc89..610f463 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
@@ -506,12 +506,12 @@
 					_doCommonGetModel(file, id, sharedObject,rwType);
 					break;
 				} else if (sharedObject == testObject) {
-					SYNC.release();
 					synchronized(sharedObject) {
 						if (sharedObject.theSharedModel!=null) {
 							_incrCount(sharedObject, rwType);
 						}
 					}
+					SYNC.release();
 					break;
 				} else {
 					// we got a different object than what we were expecting
@@ -1787,13 +1787,14 @@
 			
 			Assert.isNotNull(sharedObject, "release was requested on a model that was not being managed"); //$NON-NLS-1$
 			sharedObject.waitForLoadAttempt();
-			
+			SYNC.acquire();
 			synchronized(sharedObject) {
 				_decrCount(sharedObject, EDIT);
 				if ((sharedObject.referenceCountForRead == 0) && (sharedObject.referenceCountForEdit == 0)) {
 					discardModel(id, sharedObject);
 				}
 			}
+			SYNC.release();
 			// if edit goes to zero, but still open for read,
 			// then we should reload here, so we are in synch with
 			// contents on disk.
@@ -1902,12 +1903,14 @@
 			Assert.isNotNull(sharedObject, "release was requested on a model that was not being managed"); //$NON-NLS-1$
 			sharedObject.waitForLoadAttempt();
 		}
+		SYNC.acquire();
 		synchronized(sharedObject) {
 			_decrCount(sharedObject, READ);
 			if ((sharedObject.referenceCountForRead == 0) && (sharedObject.referenceCountForEdit == 0)) {
 				discardModel(id, sharedObject);
 			}
 		}
+		SYNC.release();
 	}
 
 	/**