Community
Participate
Working Groups
In Version: 4.2.0 Build id: I20120515-2200 I get frequent exceptions like the one below when closing the workbench. Ids mentioned: elementId: org.eclipse.jdt.ui.JavadocView & elementId: org.eclipse.jdt.ui.SourceView !ENTRY org.eclipse.e4.ui.workbench 4 0 2012-05-17 11:39:53.855 !MESSAGE Exception occurred while unrendering: org.eclipse.e4.ui.model.application.ui.advanced.impl.PlaceholderImpl@4dc6bbd3 (elementId: org.eclipse.jdt.ui.SourceView, tags: [], contributorURI: null) (widget: null, renderer: null, toBeRendered: true, onTop: false, visible: true, containerData: null, accessibilityPhrase: null) (closeable: false) !STACK 0 org.eclipse.swt.SWTException: Graphic is disposed at org.eclipse.swt.SWT.error(SWT.java:4361) at org.eclipse.swt.SWT.error(SWT.java:4276) at org.eclipse.swt.SWT.error(SWT.java:4247) at org.eclipse.swt.graphics.Image.getBounds(Image.java:666) at org.eclipse.swt.custom.CTabFolderRenderer.computeSize(CTabFolderRenderer.java:246) at org.eclipse.e4.ui.workbench.renderers.swt.CTabRendering.computeSize(CTabRendering.java:149) at org.eclipse.swt.custom.CTabFolder.setItemSize(CTabFolder.java:2668) at org.eclipse.swt.custom.CTabFolder.updateItems(CTabFolder.java:3637) at org.eclipse.swt.custom.CTabFolder.updateItems(CTabFolder.java:3574) at org.eclipse.swt.custom.CTabFolder.destroyItem(CTabFolder.java:737) at org.eclipse.swt.custom.CTabItem.dispose(CTabItem.java:126) at org.eclipse.e4.ui.workbench.renderers.swt.StackRenderer.hideChild(StackRenderer.java:799) at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeRemoveGui(PartRenderingEngine.java:774) at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.access$3(PartRenderingEngine.java:763) at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$8.run(PartRenderingEngine.java:758) at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42) at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.removeGui(PartRenderingEngine.java:743) at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeRemoveGui(PartRenderingEngine.java:789) at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.access$3(PartRenderingEngine.java:763) at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$8.run(PartRenderingEngine.java:758) at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42) at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.removeGui(PartRenderingEngine.java:743) at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeRemoveGui(PartRenderingEngine.java:789) at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.access$3(PartRenderingEngine.java:763) at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$8.run(PartRenderingEngine.java:758) at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42) at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.removeGui(PartRenderingEngine.java:743) at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeRemoveGui(PartRenderingEngine.java:789) at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.access$3(PartRenderingEngine.java:763) at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$8.run(PartRenderingEngine.java:758) at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42) at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.removeGui(PartRenderingEngine.java:743) at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeRemoveGui(PartRenderingEngine.java:796) at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.access$3(PartRenderingEngine.java:763) at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$8.run(PartRenderingEngine.java:758) at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42) at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.removeGui(PartRenderingEngine.java:743) at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeRemoveGui(PartRenderingEngine.java:796) at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.access$3(PartRenderingEngine.java:763) at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$8.run(PartRenderingEngine.java:758) at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42) at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.removeGui(PartRenderingEngine.java:743) at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeRemoveGui(PartRenderingEngine.java:796) at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.access$3(PartRenderingEngine.java:763) at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$8.run(PartRenderingEngine.java:758) at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42) at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.removeGui(PartRenderingEngine.java:743) at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeRemoveGui(PartRenderingEngine.java:796) at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.access$3(PartRenderingEngine.java:763) at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$8.run(PartRenderingEngine.java:758) at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42) at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.removeGui(PartRenderingEngine.java:743) at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.stop(PartRenderingEngine.java:1069) at org.eclipse.ui.internal.Workbench.busyClose(Workbench.java:1115) at org.eclipse.ui.internal.Workbench.access$15(Workbench.java:995) at org.eclipse.ui.internal.Workbench$16.run(Workbench.java:1176) at org.eclipse.swt.custom.BusyIndicator.showWhile(BusyIndicator.java:70) at org.eclipse.ui.internal.Workbench.close(Workbench.java:1174) at org.eclipse.ui.internal.Workbench.close(Workbench.java:1147) at org.eclipse.ui.internal.WorkbenchWindow.busyClose(WorkbenchWindow.java:1155) at org.eclipse.ui.internal.WorkbenchWindow.access$16(WorkbenchWindow.java:1135) at org.eclipse.ui.internal.WorkbenchWindow$10.run(WorkbenchWindow.java:1184) at org.eclipse.swt.custom.BusyIndicator.showWhile(BusyIndicator.java:70) at org.eclipse.ui.internal.WorkbenchWindow.close(WorkbenchWindow.java:1182) at org.eclipse.ui.internal.WorkbenchWindow.close(WorkbenchWindow.java:1194) at org.eclipse.ui.internal.WorkbenchWindow$6.close(WorkbenchWindow.java:441) at org.eclipse.e4.ui.workbench.renderers.swt.WBWRenderer$10.shellClosed(WBWRenderer.java:562) 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.Display.sendEvent(Display.java:4130) at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1457) at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1480) at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1465) at org.eclipse.swt.widgets.Shell.closeWidget(Shell.java:599) at org.eclipse.swt.widgets.Shell.windowShouldClose(Shell.java:2284) at org.eclipse.swt.widgets.Display.windowProc(Display.java:5467) at org.eclipse.swt.internal.cocoa.OS.objc_msgSendSuper(Native Method) at org.eclipse.swt.widgets.Widget.callSuper(Widget.java:220) at org.eclipse.swt.widgets.Widget.windowSendEvent(Widget.java:2101) at org.eclipse.swt.widgets.Shell.windowSendEvent(Shell.java:2280) at org.eclipse.swt.widgets.Display.windowProc(Display.java:5533) at org.eclipse.swt.internal.cocoa.OS.objc_msgSendSuper(Native Method) at org.eclipse.swt.widgets.Display.applicationSendEvent(Display.java:4978) at org.eclipse.swt.widgets.Display.applicationProc(Display.java:5127) at org.eclipse.swt.internal.cocoa.OS.objc_msgSend(Native Method) at org.eclipse.swt.internal.cocoa.NSApplication.sendEvent(NSApplication.java:128) at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3612) at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$9.run(PartRenderingEngine.java:1017) at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332) at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.run(PartRenderingEngine.java:911) at org.eclipse.e4.ui.internal.workbench.E4Workbench.createAndRunUI(E4Workbench.java:86) at org.eclipse.ui.internal.Workbench$4.run(Workbench.java:582) at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332) at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:537) at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149) at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:124) 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:353) at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:180) 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:629) at org.eclipse.equinox.launcher.Main.basicRun(Main.java:584) at org.eclipse.equinox.launcher.Main.run(Main.java:1438) at org.eclipse.equinox.launcher.Main.main(Main.java:1414)
Eric, could this be effected by the fix for the part image disappearing after a DND operation? PW
(In reply to comment #1) > Eric, could this be effected by the fix for the part image disappearing after a > DND operation? The patch for bug 378184 shouldn't have any impact here: it overrides the AbstractPartRenderer#getImage(MUIElement), and the committed code has a guard to prevent returning a disposed image. And the overridden image returned in that patch was already been in place until the DND (e.g., the test case of the Problems view: the custom icon is already seen when the part is first created).
See also bug 379976 PW
*** Bug 379976 has been marked as a duplicate of this bug. ***
Turns out it's the interaction of bug 378184 with our org.eclipse.ui.internal.e4.compatibility.CompatibilityView.updateImages(MPart) code and the difference of how we treat an uninstantiated view in a non-active perspective when the view instance is closed. - In the short term, we will revert bug 378184. - We also need to open a new bug to fix how org.eclipse.ui.internal.e4.compatibility.CompatibilityPart.updateTabImages(MUIElement) works - Bogdan has agreed to put some protection CTabFolder/CTabRendering/CTabFolderRenderer to turn the exception into a no-op, as hitting this exception can destroy your perspective. PW
I've reverted the changes made to fix Bug 378184 and re-opened it (for 4.2.1). Since this fixes this issue I'll mark this defect for RC1 and as FIXED...
Created attachment 215865 [details] Patch
Re-opening to fix an issue in the TrimStack...
Created attachment 215870 [details] Ensure that we never return a disposed 'override' image
commit 40ffef101aae6a9a1b7679c1edb682e2e9462b52 Ensures that we don't return a disposed 'override' image. I was testing essentially the same scenario using a minimized stack (since it's the other consumer of the image stored in the transient data) and encountered a similar issue...
Verified in I20120518-2145.
*** Bug 378359 has been marked as a duplicate of this bug. ***