Community
Participate
Working Groups
Closing an Event Log Event Details dialog using command-W results in an unhandled event loop exception. Also affects Eclipse 3.6. To repeat: 1. Open the error log view. 2. Double click on an error log entry 3. Close the dialog using command-W eclipse.buildId=I20100921-1024 java.version=1.6.0_20 java.vendor=Apple Inc. BootLoader constants: OS=macosx, ARCH=x86_64, WS=cocoa, NL=en_US Framework arguments: -keyring /Users/greg/.eclipse_keyring -showlocation Command-line arguments: -os macosx -ws cocoa -arch x86_64 -keyring /Users/greg/.eclipse_keyring -showlocation Stack trace is: org.eclipse.swt.SWTException: Widget is disposed at org.eclipse.swt.SWT.error(SWT.java:4083) at org.eclipse.swt.SWT.error(SWT.java:3998) at org.eclipse.swt.SWT.error(SWT.java:3969) at org.eclipse.swt.widgets.Widget.error(Widget.java:752) at org.eclipse.swt.widgets.Widget.checkWidget(Widget.java:555) at org.eclipse.swt.widgets.Shell.close(Shell.java:542) at org.eclipse.ui.internal.cocoa.CloseDialogHandler.execute(CloseDialogHandler.java:37) at org.eclipse.ui.internal.handlers.HandlerProxy.execute(HandlerProxy.java:293) at org.eclipse.core.commands.Command.executeWithChecks(Command.java:476) at org.eclipse.core.commands.ParameterizedCommand.executeWithChecks(ParameterizedCommand.java:508) at org.eclipse.ui.internal.handlers.HandlerService.executeCommand(HandlerService.java:169) at org.eclipse.ui.internal.keys.WorkbenchKeyboard.executeCommand(WorkbenchKeyboard.java:468) at org.eclipse.ui.internal.keys.WorkbenchKeyboard.press(WorkbenchKeyboard.java:786) at org.eclipse.ui.internal.keys.WorkbenchKeyboard.processKeyEvent(WorkbenchKeyboard.java:885) at org.eclipse.ui.internal.keys.WorkbenchKeyboard.filterKeySequenceBindings(WorkbenchKeyboard.java:567) at org.eclipse.ui.internal.keys.WorkbenchKeyboard.access$3(WorkbenchKeyboard.java:508) at org.eclipse.ui.internal.keys.WorkbenchKeyboard$KeyDownFilter.handleEvent(WorkbenchKeyboard.java:123) at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84) at org.eclipse.swt.widgets.Display.filterEvent(Display.java:1033) at org.eclipse.swt.widgets.Display.sendEvent(Display.java:3847) at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1408) at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1431) at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1416) at org.eclipse.swt.widgets.Widget.sendKeyEvent(Widget.java:1445) at org.eclipse.swt.widgets.Widget.sendKeyEvent(Widget.java:1441) at org.eclipse.swt.widgets.Text.sendKeyEvent(Text.java:1432) at org.eclipse.swt.widgets.Control.doCommandBySelector(Control.java:958) at org.eclipse.swt.widgets.Display.windowProc(Display.java:5180) 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.superKeyDown(Widget.java:1857) at org.eclipse.swt.widgets.Widget.keyDown(Widget.java:1054) at org.eclipse.swt.widgets.Control.keyDown(Control.java:2132) at org.eclipse.swt.widgets.Display.windowProc(Display.java:5090) 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:1984) at org.eclipse.swt.widgets.Shell.windowSendEvent(Shell.java:2046) at org.eclipse.swt.widgets.Display.windowProc(Display.java:5152) at org.eclipse.swt.internal.cocoa.OS.objc_msgSendSuper(Native Method) at org.eclipse.swt.widgets.Display.applicationSendEvent(Display.java:4688) at org.eclipse.swt.widgets.Display.applicationProc(Display.java:4765) at org.eclipse.swt.internal.cocoa.OS.objc_msgSend(Native Method) at org.eclipse.swt.internal.cocoa.NSApplication.sendEvent(NSApplication.java:119) at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3346) at org.eclipse.jface.window.Window.runEventLoop(Window.java:825) at org.eclipse.jface.window.Window.open(Window.java:801) at org.eclipse.ui.internal.views.log.EventDetailsDialog.open(EventDetailsDialog.java:176) at org.eclipse.ui.internal.views.log.EventDetailsDialogAction.run(EventDetailsDialogAction.java:98) at org.eclipse.ui.internal.views.log.LogView$15.doubleClick(LogView.java:535) at org.eclipse.jface.viewers.StructuredViewer$1.run(StructuredViewer.java:824) at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42) at org.eclipse.ui.internal.JFaceUtil$1.run(JFaceUtil.java:49) at org.eclipse.jface.util.SafeRunnable.run(SafeRunnable.java:175) at org.eclipse.jface.viewers.StructuredViewer.fireDoubleClick(StructuredViewer.java:822) at org.eclipse.jface.viewers.AbstractTreeViewer.handleDoubleSelect(AbstractTreeViewer.java:1421) at org.eclipse.jface.viewers.StructuredViewer$4.widgetDefaultSelected(StructuredViewer.java:1225) at org.eclipse.jface.util.OpenStrategy.fireDefaultSelectionEvent(OpenStrategy.java:238) at org.eclipse.jface.util.OpenStrategy.access$0(OpenStrategy.java:235) at org.eclipse.jface.util.OpenStrategy$1.handleEvent(OpenStrategy.java:296) at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84) at org.eclipse.swt.widgets.Display.sendEvent(Display.java:3848) at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1408) at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1431) at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1416) at org.eclipse.swt.widgets.Widget.notifyListeners(Widget.java:1228) at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:3694) at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3349) at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:2629) at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:2593) at org.eclipse.ui.internal.Workbench.access$4(Workbench.java:2427) at org.eclipse.ui.internal.Workbench$7.run(Workbench.java:670) at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332) at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:663) at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149) at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:115) 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(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:621) at org.eclipse.equinox.launcher.Main.basicRun(Main.java:576) at org.eclipse.equinox.launcher.Main.run(Main.java:1409)
Created attachment 182094 [details] Patch v01
Patch v01 released to HEAD
Prakash, why does the patch fix the problem? The patch looks like it guards against a NPE, but the provided stack trace was "widget is disposed". I'm confused...
Without the patch, the shell.close() is called twice (in Cocoa). Calling out shell.close() outside the if condition is wrong. The patch removes it.
aha - I didn't see that the patch removed a second call to close :-)
Verified in I20101206-1800