Some Eclipse Foundation services are deprecated, or will be soon. Please ensure you've read this important communication.

Bug 260894

Summary: Widget is disposed error in the .log file
Product: [Eclipse Project] Platform Reporter: Olivier Thomann <Olivier_Thomann>
Component: CompareAssignee: Platform-Compare-Inbox <platform-compare-inbox>
Status: RESOLVED DUPLICATE QA Contact:
Severity: normal    
Priority: P3 CC: Michael.Valenta, Mike_Wilson, tomasz.zarna
Version: 3.5   
Target Milestone: 3.5 M6   
Hardware: PC   
OS: Windows XP   
Whiteboard:

Description Olivier Thomann CLA 2009-01-13 12:30:51 EST
I got this error. No steps to reproduce so far.

eclipse.buildId=I20090106-1323
java.version=1.6.0_10
java.vendor=Sun Microsystems Inc.
BootLoader constants: OS=win32, ARCH=x86, WS=win32, NL=fr_CA
Command-line arguments:  -os win32 -ws win32 -arch x86 -debug -consolelog -console

org.eclipse.swt.SWTException: Widget is disposed
	at org.eclipse.swt.SWT.error(SWT.java:3827)
	at org.eclipse.swt.SWT.error(SWT.java:3742)
	at org.eclipse.swt.SWT.error(SWT.java:3713)
	at org.eclipse.swt.widgets.Widget.error(Widget.java:463)
	at org.eclipse.swt.widgets.Widget.getDisplay(Widget.java:578)
	at org.eclipse.compare.contentmergeviewer.TextMergeViewer.updatePresentation(TextMergeViewer.java:1558)
	at org.eclipse.compare.contentmergeviewer.TextMergeViewer.update(TextMergeViewer.java:4661)
	at org.eclipse.compare.contentmergeviewer.TextMergeViewer.updateContent(TextMergeViewer.java:2566)
	at org.eclipse.compare.contentmergeviewer.ContentMergeViewer.internalRefresh(ContentMergeViewer.java:715)
	at org.eclipse.compare.contentmergeviewer.ContentMergeViewer.inputChanged(ContentMergeViewer.java:615)
	at org.eclipse.jface.viewers.ContentViewer.setInput(ContentViewer.java:274)
	at org.eclipse.jdt.internal.ui.compare.JavaMergeViewer.setInput(JavaMergeViewer.java:131)
	at org.eclipse.compare.CompareViewerSwitchingPane.setInput(CompareViewerSwitchingPane.java:256)
	at org.eclipse.compare.CompareEditorInput.internalSetContentPaneInput(CompareEditorInput.java:791)
	at org.eclipse.compare.CompareEditorInput.access$7(CompareEditorInput.java:789)
	at org.eclipse.compare.CompareEditorInput$13.run(CompareEditorInput.java:729)
	at org.eclipse.swt.custom.BusyIndicator.showWhile(BusyIndicator.java:70)
	at org.eclipse.compare.CompareEditorInput.feed1(CompareEditorInput.java:723)
	at org.eclipse.compare.CompareEditorInput.access$2(CompareEditorInput.java:722)
	at org.eclipse.compare.CompareEditorInput$8.selectionChanged(CompareEditorInput.java:615)
	at org.eclipse.compare.CompareViewerPane.selectionChanged(CompareViewerPane.java:234)
	at org.eclipse.jface.viewers.Viewer$2.run(Viewer.java:162)
	at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:37)
	at org.eclipse.core.runtime.Platform.run(Platform.java:874)
	at org.eclipse.ui.internal.JFaceUtil$1.run(JFaceUtil.java:48)
	at org.eclipse.jface.util.SafeRunnable.run(SafeRunnable.java:175)
	at org.eclipse.jface.viewers.Viewer.fireSelectionChanged(Viewer.java:160)
	at org.eclipse.jface.viewers.StructuredViewer.updateSelection(StructuredViewer.java:2062)
	at org.eclipse.jface.viewers.StructuredViewer.handleInvalidSelection(StructuredViewer.java:1102)
	at org.eclipse.jface.viewers.StructuredViewer.preservingSelection(StructuredViewer.java:1378)
	at org.eclipse.jface.viewers.TreeViewer.preservingSelection(TreeViewer.java:397)
	at org.eclipse.jface.viewers.StructuredViewer.preservingSelection(StructuredViewer.java:1328)
	at org.eclipse.jface.viewers.StructuredViewer.refresh(StructuredViewer.java:1428)
	at org.eclipse.jface.viewers.ColumnViewer.refresh(ColumnViewer.java:537)
	at org.eclipse.compare.structuremergeviewer.StructureDiffViewer.refreshAfterDiff(StructureDiffViewer.java:523)
	at org.eclipse.compare.structuremergeviewer.StructureDiffViewer.access$4(StructureDiffViewer.java:517)
	at org.eclipse.compare.structuremergeviewer.StructureDiffViewer$9.run(StructureDiffViewer.java:508)
	at org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:35)
	at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:133)
	at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:3852)
	at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3473)
	at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:2384)
	at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:2348)
	at org.eclipse.ui.internal.Workbench.access$4(Workbench.java:2200)
	at org.eclipse.ui.internal.Workbench$5.run(Workbench.java:495)
	at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:333)
	at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:490)
	at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149)
	at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:113)
	at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:193)
	at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:110)
	at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:79)
	at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:366)
	at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:177)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:550)
	at org.eclipse.equinox.launcher.Main.basicRun(Main.java:505)
	at org.eclipse.equinox.launcher.Main.run(Main.java:1237)
	at org.eclipse.equinox.launcher.Main.main(Main.java:1213)
Comment 1 Michael Valenta CLA 2009-02-11 16:52:18 EST
This looks the same as bug 221583 and bug 260512
Comment 2 Tomasz Zarna CLA 2009-02-12 03:49:01 EST
Thanks Michael, they all look pretty much the same indeed. Especially bug 260512 and bug 221583 look almost identical. I'm wondering why patch from bug 176447 didn't help (the same impression got Olivier[1]). The stack looks similar to what we can see here, but the fix was in TextMergeViewer.ContributorInfo.elementDirtyStateChanged()[2] method. So, is the patch from bug 221583[3] any good or should I rethink it (i.e. find a better place to put the check in)?

[1] bug 221583, comment 0
[2] org.eclipse.compare.contentmergeviewer.TextMergeViewer.ContributorInfo.elementDirtyStateChanged(Object, boolean)
[3] attachment 91737 [details]
Comment 3 Michael Valenta CLA 2009-02-12 09:18:38 EST
The patch looks reasonable.
Comment 4 Mike Wilson CLA 2009-02-12 09:58:05 EST
Note that adding checks to validate that widgets are not disposed is a good idea whenever code is expected to run asynchronously, but separate from that, it would be good if we understood *why* it happens in each case. <= That let's you identify any other potentially similar issues in related code.
Comment 5 Tomasz Zarna CLA 2009-03-02 10:23:44 EST

*** This bug has been marked as a duplicate of bug 221583 ***