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

Bug 221583

Summary: Widget is disposed error in the .log file
Product: [Eclipse Project] Platform Reporter: Olivier Thomann <Olivier_Thomann>
Component: CompareAssignee: Tomasz Zarna <tomasz.zarna>
Status: RESOLVED FIXED QA Contact:
Severity: normal    
Priority: P3 CC: pawel.pogorzelski1, utilisateur_768
Version: 3.4   
Target Milestone: 3.5 M6   
Hardware: PC   
OS: Windows XP   
Whiteboard: hasPatch
Attachments:
Description Flags
Quick fix
none
mylyn/context/zip
none
Fix #2 none

Description Olivier Thomann CLA 2008-03-05 15:49:06 EST
Using I20080304-1113, I got this error in the .log file. No steps to reproduce.
Looks like bug 176447, but it was fixed for 3.3.

org.eclipse.swt.SWTException: Widget is disposed
at org.eclipse.swt.SWT.error(SWT.java:3756)
at org.eclipse.swt.SWT.error(SWT.java:3674)
at org.eclipse.swt.SWT.error(SWT.java:3645)
at org.eclipse.swt.widgets.Widget.error(Widget.java:462)
at org.eclipse.swt.widgets.Widget.getDisplay(Widget.java:577)
at org.eclipse.compare.contentmergeviewer.TextMergeViewer.updatePresentation(TextMergeViewer.java:1387)
at org.eclipse.compare.contentmergeviewer.TextMergeViewer.update(TextMergeViewer.java:4433)
at org.eclipse.compare.contentmergeviewer.TextMergeViewer.updateContent(TextMergeViewer.java:2361)
at org.eclipse.compare.contentmergeviewer.ContentMergeViewer.internalRefresh(ContentMergeViewer.java:715)
at org.eclipse.compare.contentmergeviewer.ContentMergeViewer.refresh(ContentMergeViewer.java:690)
at org.eclipse.compare.contentmergeviewer.TextMergeViewer$ContributorInfo.resetDocument(TextMergeViewer.java:797)
at org.eclipse.compare.contentmergeviewer.TextMergeViewer$ContributorInfo.elementDeleted(TextMergeViewer.java:786)
at org.eclipse.ui.editors.text.TextFileDocumentProvider$FileBufferListener.underlyingFileDeleted(TextFileDocumentProvider.java:330)
at org.eclipse.core.internal.filebuffers.TextFileBufferManager$7.run(TextFileBufferManager.java:717)
at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:37)
at org.eclipse.core.internal.filebuffers.TextFileBufferManager.fireUnderlyingFileDeleted(TextFileBufferManager.java:715)
at org.eclipse.core.internal.filebuffers.ResourceFileBuffer.handleFileDeleted(ResourceFileBuffer.java:466)
at org.eclipse.core.internal.filebuffers.ResourceFileBuffer$4.execute(ResourceFileBuffer.java:169)
at org.eclipse.core.internal.filebuffers.ResourceFileBuffer$SafeFileChange.run(ResourceFileBuffer.java:86)
at org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:35)
at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:130)
at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:3749)
at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3374)
at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:2365)
at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:2329)
at org.eclipse.ui.internal.Workbench.access$4(Workbench.java:2195)
at org.eclipse.ui.internal.Workbench$4.run(Workbench.java:475)
at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:288)
at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:470)
at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149)
at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:106)
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:362)
at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:175)
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:549)
at org.eclipse.equinox.launcher.Main.basicRun(Main.java:504)
at org.eclipse.equinox.launcher.Main.run(Main.java:1236)
at org.eclipse.equinox.launcher.Main.main(Main.java:1212)
Comment 1 Tomasz Zarna CLA 2008-03-06 05:33:17 EST
Created attachment 91737 [details]
Quick fix

It looks like we will need another checkState kind of check. To be honest, I don't know how is it related to bug 176447, but the stacktraces look identical to me too. I would appreciate any steps or clues why this might happen. Anyway, here is my proposition of a quick fix.
Comment 2 Tomasz Zarna CLA 2008-03-06 05:33:21 EST
Created attachment 91738 [details]
mylyn/context/zip
Comment 3 Tomasz Zarna CLA 2009-03-02 06:11:42 EST
Created attachment 127149 [details]
Fix #2

Here's another place that might bevulnerable to the same problem. This has been found on bug 263935.
Comment 4 Pawel Pogorzelski CLA 2009-03-02 10:20:22 EST
Steps to reproduce the problem through debug:

Host:
1. Add a breakpoint B1 at TextMergeViewer.handleDispose()
2. Add a breakpoint B2 at RangeDifference.findRanges(IProgressMonitor, IRangeComparator, IRangeComparator, IRangeComparator)

Guest:
3. Add a file A.java that doesn't exist in a CVS repository
4. Synchronize with CVS
5. You got one change outgoing (A.java addition) 
6. Open compare editor on that addition
7. Select "Override and Update" from context menu for the change

Host:
8. You got hits on B1 and B2
9. First let the tread stopped at B1 go
10. Wait at least 50 ms ;)
11. Let the thread stopped at B2 go

Guest:
12. An exception appeared in the Error Log
Comment 5 Pawel Pogorzelski CLA 2009-03-02 10:21:17 EST
Fix attached by Tomasz in comment 3 resolves the problem.
Comment 6 Tomasz Zarna CLA 2009-03-02 10:23:44 EST
*** Bug 260894 has been marked as a duplicate of this bug. ***
Comment 7 Tomasz Zarna CLA 2009-03-02 10:31:30 EST
Please note that "Quick fix" is no longer valid since signature of updatePresentation(Display) has been changed to updatePresentation() (no params).
Comment 8 Tomasz Zarna CLA 2009-03-02 10:35:45 EST
"Fix #2" released to HEAD, available in builds >N20090301-2000. Thanks for extra debugging Pawel!
Comment 9 Tomasz Zarna CLA 2009-05-13 10:11:41 EDT
*** Bug 260512 has been marked as a duplicate of this bug. ***