Bug 575279 - Data loss due to exception during SaveablesList.preCloseParts
Summary: Data loss due to exception during SaveablesList.preCloseParts
Status: REOPENED
Alias: None
Product: Platform
Classification: Eclipse Project
Component: UI (show other bugs)
Version: 4.8   Edit
Hardware: PC Windows 10
: P3 normal (vote)
Target Milestone: ---   Edit
Assignee: Platform-UI-Inbox CLA
QA Contact:
URL:
Whiteboard:
Keywords:
Depends on:
Blocks:
 
Reported: 2021-08-06 08:52 EDT by Paul Reuter CLA
Modified: 2021-08-06 17:50 EDT (History)
1 user (show)

See Also:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Paul Reuter CLA 2021-08-06 08:52:10 EDT
User was reporting complete loss of progress of his last session. The last log entry of that session indicates that the user closed the workbench with multiple unsaved editors, and an unhandled exception occurred while the SaveablesList.promptForSaving dialog was open. 

Exact version of the org.eclipse.swt plugins is 3.107.0v20180611-0422


!ENTRY org.eclipse.ui 4 0 2021-07-09 14:41:26.392
!MESSAGE Unhandled event loop exception
!STACK 0
java.lang.NullPointerException
	at org.eclipse.ui.internal.NavigationHistory.getDisplay(NavigationHistory.java:176)
	at org.eclipse.ui.internal.NavigationHistory.markEditor(NavigationHistory.java:193)
	at org.eclipse.ui.internal.WorkbenchPage.updateActiveEditorSources(WorkbenchPage.java:433)
	at org.eclipse.ui.internal.WorkbenchPage.firePartClosed(WorkbenchPage.java:5256)
	at org.eclipse.ui.internal.e4.compatibility.CompatibilityPart.lambda$0(CompatibilityPart.java:106)
	at org.eclipse.e4.ui.services.internal.events.UIEventHandler$1.run(UIEventHandler.java:40)
	at org.eclipse.swt.widgets.Synchronizer.syncExec(Synchronizer.java:233)
	at org.eclipse.ui.internal.UISynchronizer.syncExec(UISynchronizer.java:144)
	at org.eclipse.swt.widgets.Display.syncExec(Display.java:4567)
	at org.eclipse.e4.ui.internal.workbench.swt.E4Application$1.syncExec(E4Application.java:212)
	at org.eclipse.e4.ui.services.internal.events.UIEventHandler.handleEvent(UIEventHandler.java:36)
	at org.eclipse.equinox.internal.event.EventHandlerWrapper.handleEvent(EventHandlerWrapper.java:201)
	at org.eclipse.equinox.internal.event.EventHandlerTracker.dispatchEvent(EventHandlerTracker.java:196)
	at org.eclipse.equinox.internal.event.EventHandlerTracker.dispatchEvent(EventHandlerTracker.java:1)
	at org.eclipse.osgi.framework.eventmgr.EventManager.dispatchEvent(EventManager.java:230)
	at org.eclipse.osgi.framework.eventmgr.ListenerQueue.dispatchEventSynchronous(ListenerQueue.java:148)
	at org.eclipse.equinox.internal.event.EventAdminImpl.dispatchEvent(EventAdminImpl.java:135)
	at org.eclipse.equinox.internal.event.EventAdminImpl.sendEvent(EventAdminImpl.java:78)
	at org.eclipse.equinox.internal.event.EventComponent.sendEvent(EventComponent.java:39)
	at org.eclipse.e4.ui.services.internal.events.EventBroker.send(EventBroker.java:52)
	at org.eclipse.e4.ui.internal.workbench.UIEventPublisher.notifyChanged(UIEventPublisher.java:60)
	at org.eclipse.emf.common.notify.impl.BasicNotifierImpl.eNotify(BasicNotifierImpl.java:374)
	at org.eclipse.e4.ui.model.application.ui.impl.UIElementImpl.setWidget(UIElementImpl.java:262)
	at org.eclipse.e4.ui.workbench.renderers.swt.SWTPartRenderer.unbindWidget(SWTPartRenderer.java:148)
	at org.eclipse.e4.ui.workbench.renderers.swt.SWTPartRenderer.lambda$0(SWTPartRenderer.java:137)
	at org.eclipse.swt.widgets.TypedListener.handleEvent(TypedListener.java:124)
	at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:86)
	at org.eclipse.swt.widgets.Display.sendEvent(Display.java:4118)
	at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1052)
	at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1076)
	at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1057)
	at org.eclipse.swt.widgets.Widget.release(Widget.java:809)
	at org.eclipse.swt.widgets.Composite.releaseChildren(Composite.java:929)
	at org.eclipse.swt.widgets.Widget.release(Widget.java:812)
	at org.eclipse.swt.widgets.Composite.releaseChildren(Composite.java:929)
	at org.eclipse.swt.widgets.Widget.release(Widget.java:812)
	at org.eclipse.swt.widgets.Composite.releaseChildren(Composite.java:929)
	at org.eclipse.swt.widgets.Widget.release(Widget.java:812)
	at org.eclipse.swt.widgets.Composite.releaseChildren(Composite.java:929)
	at org.eclipse.swt.widgets.Widget.release(Widget.java:812)
	at org.eclipse.swt.widgets.Composite.releaseChildren(Composite.java:929)
	at org.eclipse.swt.widgets.Widget.release(Widget.java:812)
	at org.eclipse.swt.widgets.Composite.releaseChildren(Composite.java:929)
	at org.eclipse.swt.widgets.Widget.release(Widget.java:812)
	at org.eclipse.swt.widgets.Composite.releaseChildren(Composite.java:929)
	at org.eclipse.swt.widgets.Widget.release(Widget.java:812)
	at org.eclipse.swt.widgets.Composite.releaseChildren(Composite.java:929)
	at org.eclipse.swt.widgets.Widget.release(Widget.java:812)
	at org.eclipse.swt.widgets.Composite.releaseChildren(Composite.java:929)
	at org.eclipse.swt.widgets.Canvas.releaseChildren(Canvas.java:171)
	at org.eclipse.swt.widgets.Decorations.releaseChildren(Decorations.java:728)
	at org.eclipse.swt.widgets.Shell.releaseChildren(Shell.java:1340)
	at org.eclipse.swt.widgets.Widget.release(Widget.java:812)
	at org.eclipse.swt.widgets.Widget.dispose(Widget.java:426)
	at org.eclipse.swt.widgets.Decorations.dispose(Decorations.java:405)
	at org.eclipse.swt.widgets.Shell.dispose(Shell.java:729)
	at org.eclipse.swt.widgets.Display.release(Display.java:3585)
	at org.eclipse.swt.graphics.Device.dispose(Device.java:297)
	at org.eclipse.swt.widgets.Display.messageProc(Display.java:3120)
	at org.eclipse.swt.internal.win32.OS.DefWindowProcW(Native Method)
	at org.eclipse.swt.internal.win32.OS.DefWindowProc(OS.java:2298)
	at org.eclipse.swt.widgets.Shell.callWindowProc(Shell.java:505)
	at org.eclipse.swt.widgets.Control.windowProc(Control.java:4863)
	at org.eclipse.swt.widgets.Canvas.windowProc(Canvas.java:345)
	at org.eclipse.swt.widgets.Decorations.windowProc(Decorations.java:1499)
	at org.eclipse.swt.widgets.Shell.windowProc(Shell.java:2159)
	at org.eclipse.swt.widgets.Display.windowProc(Display.java:4765)
	at org.eclipse.swt.internal.win32.OS.PeekMessageW(Native Method)
	at org.eclipse.swt.internal.win32.OS.PeekMessage(OS.java:2787)
	at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3529)
	at org.eclipse.jface.window.Window.runEventLoop(Window.java:818)
	at org.eclipse.jface.window.Window.open(Window.java:794)
	at org.eclipse.ui.internal.SaveablesList.promptForSaving(SaveablesList.java:674)
	at org.eclipse.ui.internal.SaveablesList.promptForSavingIfNecessary(SaveablesList.java:569)
	at org.eclipse.ui.internal.SaveablesList.preCloseParts(SaveablesList.java:525)
	at org.eclipse.ui.internal.WorkbenchPage.saveAll(WorkbenchPage.java:3705)
	at org.eclipse.ui.internal.Workbench.saveAllEditors(Workbench.java:1397)
	at org.eclipse.ui.internal.Workbench.busyClose(Workbench.java:1108)
	at org.eclipse.ui.internal.Workbench.lambda$4(Workbench.java:1430)
	at org.eclipse.swt.custom.BusyIndicator.showWhile(BusyIndicator.java:71)
	at org.eclipse.ui.internal.Workbench.close(Workbench.java:1430)
	at org.eclipse.ui.internal.Workbench.close(Workbench.java:1403)
	at org.eclipse.ui.internal.Workbench.lambda$17(Workbench.java:2844)
	at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:86)
	at org.eclipse.swt.widgets.Display.sendEvent(Display.java:4118)
	at org.eclipse.swt.widgets.Display.sendEvent(Display.java:4110)
	at org.eclipse.swt.widgets.Display.messageProc(Display.java:3133)
	at org.eclipse.swt.internal.win32.OS.DefWindowProcW(Native Method)
	at org.eclipse.swt.internal.win32.OS.DefWindowProc(OS.java:2298)
	at org.eclipse.swt.widgets.Shell.callWindowProc(Shell.java:505)
	at org.eclipse.swt.widgets.Control.windowProc(Control.java:4863)
	at org.eclipse.swt.widgets.Canvas.windowProc(Canvas.java:345)
	at org.eclipse.swt.widgets.Decorations.windowProc(Decorations.java:1499)
	at org.eclipse.swt.widgets.Shell.windowProc(Shell.java:2159)
	at org.eclipse.swt.widgets.Display.windowProc(Display.java:4757)
	at org.eclipse.swt.internal.win32.OS.PeekMessageW(Native Method)
	at org.eclipse.swt.internal.win32.OS.PeekMessage(OS.java:2787)
	at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3529)
	at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$5.run(PartRenderingEngine.java:1170)
	at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:336)
	at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.run(PartRenderingEngine.java:1059)
	at org.eclipse.e4.ui.internal.workbench.E4Workbench.createAndRunUI(E4Workbench.java:153)
	at org.eclipse.ui.internal.Workbench.lambda$3(Workbench.java:667)
	at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:336)
	at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:597)
	at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:148)
	at com.helinks.sts.app.STSApplication.start(STSApplication.java:112)
	at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:196)
	at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:134)
	at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:104)
	at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:388)
	at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:243)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:656)
	at org.eclipse.equinox.launcher.Main.basicRun(Main.java:592)
	at org.eclipse.equinox.launcher.Main.run(Main.java:1498)
Comment 1 Rolf Theunissen CLA 2021-08-06 12:02:32 EDT

*** This bug has been marked as a duplicate of bug 532317 ***
Comment 2 Paul Reuter CLA 2021-08-06 17:50:46 EDT
I don't think this bug should be marked as duplicate. The observed behaviour is due to two bugs:

- the NullpointerException that is indeed fixed in bug 532317
- the data loss due to the unhandled NullpointerException during the save on close process

Unless the save on close is made more robust, the next untimely Exception will still cause data loss.