Some Eclipse Foundation services are deprecated, or will be soon. Please ensure you've read this important communication.
Bug 330254 - [Compatibility] Part getting closed by workbench window shutdown causes part activation
Summary: [Compatibility] Part getting closed by workbench window shutdown causes part ...
Status: RESOLVED FIXED
Alias: None
Product: e4
Classification: Eclipse Project
Component: UI (show other bugs)
Version: 1.0   Edit
Hardware: All All
: P3 normal (vote)
Target Milestone: 4.1 M4   Edit
Assignee: Remy Suen CLA
QA Contact: Remy Suen CLA
URL:
Whiteboard:
Keywords:
Depends on:
Blocks:
 
Reported: 2010-11-15 09:45 EST by Thomas Kratz CLA
Modified: 2010-11-18 07:42 EST (History)
1 user (show)

See Also:


Attachments
WorkbenchWindow patch v1 (1.48 KB, patch)
2010-11-17 11:17 EST, Remy Suen CLA
no flags Details | Diff

Note You need to log in before you can comment on or make changes to this bug.
Description Thomas Kratz CLA 2010-11-15 09:45:39 EST
Build Identifier: M3 4.1

running my 3.6 based app on e4 I get an Exception on shutdown of the
workbench. Remy said it may be related to

https://bugs.eclipse.org/bugs/show_bug.cgi?id=308492



org.eclipse.e4.core.di.InjectionException:
org.eclipse.swt.SWTException: Widget is disposed
       at org.eclipse.e4.core.internal.di.MethodRequestor.execute(MethodRequestor.java:59)
       at org.eclipse.e4.core.internal.contexts.ContextObjectSupplier$ContextInjectionListener.update(ContextObjectSupplier.java:75)
       at org.eclipse.e4.core.internal.contexts.TrackableComputationExt.update(TrackableComputationExt.java:90)
       at org.eclipse.e4.core.internal.contexts.EclipseContext.processScheduled(EclipseContext.java:326)
       at org.eclipse.e4.core.internal.contexts.EclipseContext.set(EclipseContext.java:343)
       at org.eclipse.e4.core.internal.contexts.EclipseContext.activate(EclipseContext.java:596)
       at org.eclipse.e4.core.internal.contexts.EclipseContext.activateBranch(EclipseContext.java:601)
       at org.eclipse.e4.ui.internal.workbench.PartActivationHistory.activate(PartActivationHistory.java:52)
       at org.eclipse.e4.ui.internal.workbench.PartServiceImpl.activate(PartServiceImpl.java:484)
       at org.eclipse.e4.ui.internal.workbench.PartServiceImpl.activate(PartServiceImpl.java:457)
       at org.eclipse.e4.ui.internal.workbench.swt.AbstractPartRenderer.activate(AbstractPartRenderer.java:105)
       at org.eclipse.e4.ui.workbench.renderers.swt.ContributedPartRenderer$3.handleEvent(ContributedPartRenderer.java:171)
       at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84)
       at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1053)
       at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1077)
       at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1058)
       at org.eclipse.swt.widgets.Shell.setActiveControl(Shell.java:1447)
       at org.eclipse.swt.widgets.Control.sendFocusEvent(Control.java:2642)
       at org.eclipse.swt.widgets.Widget.wmSetFocus(Widget.java:2402)
       at org.eclipse.swt.widgets.Control.WM_SETFOCUS(Control.java:4797)
       at org.eclipse.swt.widgets.Canvas.WM_SETFOCUS(Canvas.java:448)
       at org.eclipse.swt.widgets.Control.windowProc(Control.java:4234)
       at org.eclipse.swt.widgets.Canvas.windowProc(Canvas.java:341)
       at org.eclipse.swt.widgets.Display.windowProc(Display.java:4891)
       at org.eclipse.swt.internal.win32.OS.DestroyWindow(Native Method)
       at org.eclipse.swt.widgets.Control.destroyWidget(Control.java:684)
       at org.eclipse.swt.widgets.Widget.release(Widget.java:818)
       at org.eclipse.swt.widgets.Widget.dispose(Widget.java:446)
       at org.eclipse.jface.action.ToolBarManager.dispose(ToolBarManager.java:153)
       at org.eclipse.ui.internal.forms.widgets.FormHeading$6.widgetDisposed(FormHeading.java:772)
       at org.eclipse.swt.widgets.TypedListener.handleEvent(TypedListener.java:123)
       at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84)
       at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1053)
       at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1077)
       at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1058)
       at org.eclipse.swt.widgets.Widget.release(Widget.java:808)
       at org.eclipse.swt.widgets.Composite.releaseChildren(Composite.java:872)
       at org.eclipse.swt.widgets.Widget.release(Widget.java:811)
       at org.eclipse.swt.widgets.Composite.releaseChildren(Composite.java:872)
       at org.eclipse.swt.widgets.Widget.release(Widget.java:811)
       at org.eclipse.swt.widgets.Composite.releaseChildren(Composite.java:872)
       at org.eclipse.swt.widgets.Widget.release(Widget.java:811)
       at org.eclipse.swt.widgets.Composite.releaseChildren(Composite.java:872)
       at org.eclipse.swt.widgets.Widget.release(Widget.java:811)
       at org.eclipse.swt.widgets.Composite.releaseChildren(Composite.java:872)
       at org.eclipse.swt.widgets.Widget.release(Widget.java:811)
       at org.eclipse.swt.widgets.Widget.dispose(Widget.java:446)
       at org.eclipse.e4.ui.workbench.renderers.swt.SWTPartRenderer.disposeWidget(SWTPartRenderer.java:134)
       at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeRemoveGui(PartRenderingEngine.java:628)
       at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.access$1(PartRenderingEngine.java:591)
       at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$5.run(PartRenderingEngine.java:586)
       at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42)
       at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.removeGui(PartRenderingEngine.java:572)
       at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeRemoveGui(PartRenderingEngine.java:624)
       at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.access$1(PartRenderingEngine.java:591)
       at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$5.run(PartRenderingEngine.java:586)
       at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42)
       at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.removeGui(PartRenderingEngine.java:572)
       at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeRemoveGui(PartRenderingEngine.java:624)
       at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.access$1(PartRenderingEngine.java:591)
       at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$5.run(PartRenderingEngine.java:586)
       at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42)
       at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.removeGui(PartRenderingEngine.java:572)
       at org.eclipse.e4.ui.workbench.renderers.swt.ElementReferenceRenderer.disposeWidget(ElementReferenceRenderer.java:108)
       at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeRemoveGui(PartRenderingEngine.java:628)
       at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.access$1(PartRenderingEngine.java:591)
       at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$5.run(PartRenderingEngine.java:586)
       at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42)
       at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.removeGui(PartRenderingEngine.java:572)
       at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeRemoveGui(PartRenderingEngine.java:624)
       at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.access$1(PartRenderingEngine.java:591)
       at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$5.run(PartRenderingEngine.java:586)
       at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42)
       at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.removeGui(PartRenderingEngine.java:572)
       at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeRemoveGui(PartRenderingEngine.java:624)
       at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.access$1(PartRenderingEngine.java:591)
       at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$5.run(PartRenderingEngine.java:586)
       at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42)
       at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.removeGui(PartRenderingEngine.java:572)
       at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeRemoveGui(PartRenderingEngine.java:624)
       at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.access$1(PartRenderingEngine.java:591)
       at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$5.run(PartRenderingEngine.java:586)
       at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42)
       at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.removeGui(PartRenderingEngine.java:572)
       at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeRemoveGui(PartRenderingEngine.java:624)
       at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.access$1(PartRenderingEngine.java:591)
       at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$5.run(PartRenderingEngine.java:586)
       at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42)
       at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.removeGui(PartRenderingEngine.java:572)
       at org.eclipse.ui.internal.WorkbenchWindow.hardClose(WorkbenchWindow.java:1389)
       at org.eclipse.ui.internal.WorkbenchWindow.busyClose(WorkbenchWindow.java:1091)
       at org.eclipse.ui.internal.WorkbenchWindow.access$9(WorkbenchWindow.java:1070)
       at org.eclipse.ui.internal.WorkbenchWindow$6.run(WorkbenchWindow.java:1117)
       at org.eclipse.swt.custom.BusyIndicator.showWhile(BusyIndicator.java:70)
       at org.eclipse.ui.internal.WorkbenchWindow.close(WorkbenchWindow.java:1115)
       at org.eclipse.ui.internal.Workbench$14.run(Workbench.java:1040)
       at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42)
       at org.eclipse.ui.internal.Workbench.busyClose(Workbench.java:1034)
       at org.eclipse.ui.internal.Workbench.access$11(Workbench.java:952)
       at org.eclipse.ui.internal.Workbench$15.run(Workbench.java:1114)
       at org.eclipse.swt.custom.BusyIndicator.showWhile(BusyIndicator.java:70)
       at org.eclipse.ui.internal.Workbench.close(Workbench.java:1112)
       at org.eclipse.ui.internal.Workbench.close(Workbench.java:1085)
       at org.eclipse.ui.internal.WorkbenchWindow.busyClose(WorkbenchWindow.java:1088)
       at org.eclipse.ui.internal.WorkbenchWindow.access$9(WorkbenchWindow.java:1070)
       at org.eclipse.ui.internal.WorkbenchWindow$6.run(WorkbenchWindow.java:1117)
       at org.eclipse.swt.custom.BusyIndicator.showWhile(BusyIndicator.java:70)
       at org.eclipse.ui.internal.WorkbenchWindow.close(WorkbenchWindow.java:1115)
       at org.eclipse.ui.internal.WorkbenchWindow.close(WorkbenchWindow.java:1131)
       at org.eclipse.ui.internal.WorkbenchWindow$4.close(WorkbenchWindow.java:431)
       at org.eclipse.e4.ui.workbench.renderers.swt.WBWRenderer$8.shellClosed(WBWRenderer.java:419)
       at org.eclipse.swt.widgets.TypedListener.handleEvent(TypedListener.java:98)
       at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84)
       at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1053)
       at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1077)
       at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1062)
       at org.eclipse.swt.widgets.Decorations.closeWidget(Decorations.java:308)
       at org.eclipse.swt.widgets.Decorations.WM_CLOSE(Decorations.java:1665)
       at org.eclipse.swt.widgets.Control.windowProc(Control.java:4167)
       at org.eclipse.swt.widgets.Canvas.windowProc(Canvas.java:341)
       at org.eclipse.swt.widgets.Decorations.windowProc(Decorations.java:1598)
       at org.eclipse.swt.widgets.Shell.windowProc(Shell.java:2061)
       at org.eclipse.swt.widgets.Display.windowProc(Display.java:4891)
       at org.eclipse.swt.internal.win32.OS.DefWindowProcW(Native Method)
       at org.eclipse.swt.internal.win32.OS.DefWindowProc(OS.java:2456)
       at org.eclipse.swt.widgets.Shell.callWindowProc(Shell.java:497)
       at org.eclipse.swt.widgets.Control.windowProc(Control.java:4256)
       at org.eclipse.swt.widgets.Canvas.windowProc(Canvas.java:341)
       at org.eclipse.swt.widgets.Decorations.windowProc(Decorations.java:1598)
       at org.eclipse.swt.widgets.Shell.windowProc(Shell.java:2061)
       at org.eclipse.swt.widgets.Display.windowProc(Display.java:4891)
       at org.eclipse.swt.internal.win32.OS.DefWindowProcW(Native Method)
       at org.eclipse.swt.internal.win32.OS.DefWindowProc(OS.java:2456)
       at org.eclipse.swt.widgets.Shell.callWindowProc(Shell.java:497)
       at org.eclipse.swt.widgets.Control.windowProc(Control.java:4256)
       at org.eclipse.swt.widgets.Canvas.windowProc(Canvas.java:341)
       at org.eclipse.swt.widgets.Decorations.windowProc(Decorations.java:1598)
       at org.eclipse.swt.widgets.Shell.windowProc(Shell.java:2061)
       at org.eclipse.swt.widgets.Display.windowProc(Display.java:4891)
       at org.eclipse.swt.internal.win32.OS.DispatchMessageW(Native Method)
       at org.eclipse.swt.internal.win32.OS.DispatchMessage(OS.java:2461)
       at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3673)
       at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$6.run(PartRenderingEngine.java:780)
       at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332)
       at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.run(PartRenderingEngine.java:689)
       at org.eclipse.e4.ui.internal.workbench.E4Workbench.createAndRunUI(E4Workbench.java:104)
       at org.eclipse.ui.internal.Workbench$3.run(Workbench.java:542)
       at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332)
       at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:524)
       at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149)
       at de.eiswind.paris.client.core.Application.start(Application.java:35)
       at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:196)
       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:369)
       at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:179)
       at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
       at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
       at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
       at java.lang.reflect.Method.invoke(Unknown Source)
       at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:621)
       at org.eclipse.equinox.launcher.Main.basicRun(Main.java:576)
       at org.eclipse.equinox.launcher.Main.run(Main.java:1409)
       at org.eclipse.equinox.launcher.Main.main(Main.java:1385)

Reproducible: Always

Steps to Reproduce:
1. Create a FormEditor
2. Open it
3. Shutdown workbench
Comment 1 Paul Webster CLA 2010-11-15 10:16:40 EST
Second part of the exception:

Caused by: org.eclipse.swt.SWTException: Widget is disposed
       at org.eclipse.swt.SWT.error(SWT.java:4091)
       at org.eclipse.swt.SWT.error(SWT.java:4006)
       at org.eclipse.swt.SWT.error(SWT.java:3977)
       at org.eclipse.swt.widgets.Widget.error(Widget.java:468)
       at org.eclipse.swt.widgets.Widget.checkWidget(Widget.java:340)
       at org.eclipse.swt.widgets.Widget.getData(Widget.java:525)
       at org.eclipse.ui.part.MultiPageEditorPart.getEditor(MultiPageEditorPart.java:610)
       at org.eclipse.ui.part.MultiPageEditorPart.getActiveEditor(MultiPageEditorPart.java:534)
       at org.eclipse.ui.forms.editor.FormEditor.getActiveEditor(FormEditor.java:430)
       at org.eclipse.ui.part.MultiPageEditorPart.getAdapter(MultiPageEditorPart.java:1173)
       at org.eclipse.ui.internal.util.Util.getAdapter(Util.java:110)
       at org.eclipse.ui.internal.WorkbenchPage.getShowInSource(WorkbenchPage.java:236)
       at org.eclipse.ui.internal.WorkbenchPage.getContext(WorkbenchPage.java:240)
       at org.eclipse.ui.internal.WorkbenchPage.updateShowInSources(WorkbenchPage.java:228)
       at org.eclipse.ui.internal.WorkbenchPage.updateActivations(WorkbenchPage.java:171)
       at org.eclipse.ui.internal.WorkbenchPage.access$7(WorkbenchPage.java:166)
       at org.eclipse.ui.internal.WorkbenchPage$E4PartListener.partActivated(WorkbenchPage.java:134)
       at org.eclipse.e4.ui.internal.workbench.PartServiceImpl.firePartActivated(PartServiceImpl.java:170)
       at org.eclipse.e4.ui.internal.workbench.PartServiceImpl.setPart(PartServiceImpl.java:144)
       at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
       at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
       at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
       at java.lang.reflect.Method.invoke(Unknown Source)
       at org.eclipse.e4.core.internal.di.MethodRequestor.execute(MethodRequestor.java:52)
Comment 2 Remy Suen CLA 2010-11-15 16:08:31 EST
Is this consistently reproducible? I can't seem to get it to happen with the PDE editors.
Comment 3 Thomas Kratz CLA 2010-11-16 03:05:26 EST
Yes happens on every shutdown at my side. Don't know how to provide further help. Let me know
Comment 4 Remy Suen CLA 2010-11-16 05:37:52 EST
(In reply to comment #3)
> Yes happens on every shutdown at my side.

Do you get the problem if you launch a second Eclipse instance and shutdown with PDE editors up?
Comment 5 Thomas Kratz CLA 2010-11-16 05:49:25 EST
no it happens only with my own editors. maybe its in getAdapter where i should provide something from the superclasses ?
Comment 6 Remy Suen CLA 2010-11-16 05:51:22 EST
(In reply to comment #5)
> no it happens only with my own editors.

If you make a very simple form editor (just make a few pages and put buttons in them or something), does the same problem occur?

> maybe its in getAdapter where i should
> provide something from the superclasses ?

No, I don't think that's the problem. And if it is, why does your code work in 3.x? :)
Comment 7 Thomas Kratz CLA 2010-11-16 06:00:11 EST
The editor is only some pages with textfields, labels and tables. But I have Actions in the Form Header Toolbar
at org.eclipse.swt.widgets.Widget.dispose(Widget.java:446)
	at org.eclipse.jface.action.ToolBarManager.dispose(ToolBarManager.java:153)
	at org.eclipse.ui.internal.forms.widgets.FormHeading$6.widgetDisposed(FormHeading.java:772)
	
is it there ?
Comment 8 Remy Suen CLA 2010-11-16 06:03:30 EST
(In reply to comment #7)
> The editor is only some pages with textfields, labels and tables. But I have
> Actions in the Form Header Toolbar
> at org.eclipse.swt.widgets.Widget.dispose(Widget.java:446)
>     at org.eclipse.jface.action.ToolBarManager.dispose(ToolBarManager.java:153)
>     at
> org.eclipse.ui.internal.forms.widgets.FormHeading$6.widgetDisposed(FormHeading.java:772)
> 
> is it there ?

It's possible that's the cause although I think the PDE editors also have actions. If you comment out the action contribution code does the problem stop happening?
Comment 9 Thomas Kratz CLA 2010-11-16 06:17:13 EST
Yes, if I completely remove the actions from the form toolbar, the exception does not occur anymore
Comment 10 Remy Suen CLA 2010-11-17 11:17:02 EST
Created attachment 183311 [details]
WorkbenchWindow patch v1

Hi Thomas, could you give this patch a spin and see if it fixes your problem? Thanks.
Comment 11 Thomas Kratz CLA 2010-11-18 04:48:26 EST
Patch makes Exception go away.
Comment 12 Remy Suen CLA 2010-11-18 07:42:13 EST
(In reply to comment #10)
> Created an attachment (id=183311) [details]
> WorkbenchWindow patch v1

Fix released to HEAD. Thanks for helping investigate the cause and testing the fix, Thomas!

Please feel free to let us know if you see any other problems.