[107126] StructuredTextEditor can cause incorrect reference counts on TextFileBuffers
diff --git a/bundles/org.eclipse.wst.sse.ui/src/org/eclipse/wst/sse/ui/internal/StructuredTextEditor.java b/bundles/org.eclipse.wst.sse.ui/src/org/eclipse/wst/sse/ui/internal/StructuredTextEditor.java
index b0c3102..5592780 100644
--- a/bundles/org.eclipse.wst.sse.ui/src/org/eclipse/wst/sse/ui/internal/StructuredTextEditor.java
+++ b/bundles/org.eclipse.wst.sse.ui/src/org/eclipse/wst/sse/ui/internal/StructuredTextEditor.java
@@ -506,6 +506,7 @@
 	private InternalElementStateListener internalElementStateListener = new InternalElementStateListener();
 	private boolean shouldClose = false;
 	private long startPerfTime;
+	private boolean fisReleased;
 
 	public StructuredTextEditor() {
 
@@ -1155,8 +1156,9 @@
 	 * @see org.eclipse.ui.texteditor.AbstractDecoratedTextEditor#disposeDocumentProvider()
 	 */
 	protected void disposeDocumentProvider() {
-		if (fStructuredModel != null && !(getDocumentProvider() instanceof IModelProvider)) {
+		if (fStructuredModel != null && !fisReleased && !(getDocumentProvider() instanceof IModelProvider)) {
 			fStructuredModel.releaseFromEdit();
+			fisReleased=true;
 		}
 		super.disposeDocumentProvider();
 	}
@@ -1532,6 +1534,7 @@
 			// CODE PATH
 			if (getDocumentProvider() instanceof IModelProvider) {
 				fStructuredModel = ((IModelProvider) getDocumentProvider()).getModel(getEditorInput());
+				fisReleased = false;
 			}
 			else {
 				IDocument doc = getDocumentProvider().getDocument(getEditorInput());
@@ -1541,6 +1544,7 @@
 						model = StructuredModelManager.getModelManager().getModelForEdit((IStructuredDocument) doc);
 					}
 					fStructuredModel = model;
+					fisReleased = false;
 				}
 			}
 			// factories will not be re-added if already exists