[242901] NPE during source editor close
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 43e77f5..06f6906 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
@@ -1739,7 +1739,17 @@
 				if ((sharedObject.referenceCountForRead > 0) && (sharedObject.referenceCountForEdit == 0) && sharedObject.theSharedModel.isDirty()) {
 					signalPreLifeCycleListenerRevert(sharedObject.theSharedModel);
 					revertModel(id, sharedObject);
-					sharedObject.theSharedModel.setDirtyState(false);
+					/*
+					 * Because model events are fired to notify about the
+					 * revert's changes, and listeners can still get/release
+					 * the model from this thread (locking prevents it being
+					 * done from other threads), the reference counts could
+					 * have changed since we entered this if block, and the
+					 * model could have been discarded.  Check the counts again.
+					 */
+					if (sharedObject.referenceCountForRead > 0 && sharedObject.referenceCountForEdit == 0) {
+						sharedObject.theSharedModel.setDirtyState(false);
+					}
 					signalPostLifeCycleListenerRevert(sharedObject.theSharedModel);
 				}
 			}