diff --git a/team/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareEditor.java b/team/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareEditor.java index 9a49be9ddc3..8850b50b274 100644 --- a/team/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareEditor.java +++ b/team/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareEditor.java @@ -373,6 +373,13 @@ protected IStatus run(final IProgressMonitor monitor) { if (hadPreviousInput || (knownSaveables != null && !isAllSaveablesKnown())) { registerSaveable(); } + // Check if the contents are being created right now, e.g. by the "still + // initializing" timer, with this syncExec dispatched by the event loop of + // the first diff. Creating them again would leave a second, orphaned + // content tree, whose viewer later diffs against a disposed input. + if (CompareEditor.this.getState() == CREATING_CONTROL) { + return; + } setState(newState[0]); createCompareControl(); });