Community
Participate
Working Groups
Build 20011025 I had this situation earlier today where there was a core internal error on shutdown. It was a usual suspect: a NullPointerException in ElementTree#findOldest. This means the trees didn't form a simple ancestral chain, for example if the workspace tree is still mutable at save time. Unfortunately I lost the stack trace. I can't yet reproduce, but I had done something like: 1) Startup the workbench 2) Do a build that causes errors (eg, missing builder) 3) Immediately shutdown.
Exact steps to reproduce: 1) Create a new workbench, containing PDE project, one java file 2) Shutdown 3) Turn of the org.eclipse.pde plugin (rename plugin.xml->plugin.xml.off) 4) Restart the workbench 5) Force a build by editing java file (error occurs) 6) Immediately shutdown. Error on shutdown. Stack trace follows: 4 org.eclipse.core.resources 568 Could not write metadata for: /. java.lang.NullPointerException at org.eclipse.core.internal.watson.ElementTree.findOldest(ElementTree.java:427) at org.eclipse.core.internal.watson.ElementTreeWriter.sortTrees(ElementTreeWriter.j ava:105) at org.eclipse.core.internal.watson.ElementTreeWriter.writeDeltaChain(ElementTreeWr iter.java:193) at org.eclipse.core.internal.resources.SaveManager.writeTree(SaveManager.java:914) at org.eclipse.core.internal.resources.SaveManager.saveTree(SaveManager.java:716) at org.eclipse.core.internal.resources.SaveManager.save(SaveManager.java:1077) at org.eclipse.core.internal.resources.Workspace.save(Workspace.java:1211) at org.eclipse.ui.internal.Workbench$4.run(Workbench.java:178) at org.eclipse.jface.operation.ModalContext.runInCurrentThread(ModalContext.java:29 6) at org.eclipse.jface.operation.ModalContext.run(ModalContext.java:249) at org.eclipse.jface.dialogs.ProgressMonitorDialog.run(ProgressMonitorDialog.java:3 35) at org.eclipse.ui.internal.Workbench.disconnectFromWorkspace(Workbench.java:185) at org.eclipse.ui.internal.Workbench.busyClose(Workbench.java:108) at org.eclipse.ui.internal.Workbench.access$4(Workbench.java:76) at org.eclipse.ui.internal.Workbench$3.run(Workbench.java:157) at org.eclipse.swt.custom.BusyIndicator.showWhile(BusyIndicator.java:56) at org.eclipse.ui.internal.Workbench.close(Workbench.java:155) at org.eclipse.ui.internal.WorkbenchWindow.busyClose(WorkbenchWindow.java:256) at org.eclipse.ui.internal.WorkbenchWindow.access$3(WorkbenchWindow.java:251) at org.eclipse.ui.internal.WorkbenchWindow$1.run(WorkbenchWindow.java:291) at org.eclipse.swt.custom.BusyIndicator.showWhile(BusyIndicator.java:56) at org.eclipse.ui.internal.WorkbenchWindow.close(WorkbenchWindow.java:289) at org.eclipse.jface.window.Window.handleShellCloseEvent(Window.java:462) at org.eclipse.jface.window.Window$2.shellClosed(Window.java:389) at org.eclipse.swt.widgets.TypedListener.handleEvent(TypedListener.java:150) at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java(Compiled Code)) at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:840) at org.eclipse.swt.widgets.Decorations.WM_CLOSE(Decorations.java:971) at org.eclipse.swt.widgets.Shell.WM_CLOSE(Shell.java:854) at org.eclipse.swt.widgets.Control.windowProc(Control.java(Compiled Code)) at org.eclipse.swt.widgets.Decorations.windowProc(Decorations.java:932) at org.eclipse.swt.widgets.Display.windowProc(Display.java(Compiled Code)) at org.eclipse.swt.internal.win32.OS.DefWindowProc(Native Method) at org.eclipse.swt.widgets.Scrollable.callWindowProc(Scrollable.java(Compiled Code)) at org.eclipse.swt.widgets.Control.windowProc(Control.java(Compiled Code)) at org.eclipse.swt.widgets.Decorations.windowProc(Decorations.java:932) at org.eclipse.swt.widgets.Display.windowProc(Display.java(Compiled Code)) at org.eclipse.swt.internal.win32.OS.DefWindowProc(Native Method) at org.eclipse.swt.widgets.Scrollable.callWindowProc(Scrollable.java(Compiled Code)) at org.eclipse.swt.widgets.Control.windowProc(Control.java(Compiled Code)) at org.eclipse.swt.widgets.Decorations.windowProc(Decorations.java:932) at org.eclipse.swt.widgets.Display.windowProc(Display.java(Compiled Code)) at org.eclipse.swt.internal.win32.OS.DispatchMessage(Native Method) at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:1158) at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:675) at org.eclipse.ui.internal.Workbench.run(Workbench.java:658) at org.eclipse.core.internal.boot.InternalBootLoader.run(InternalBootLoader.java:82 0) at org.eclipse.core.boot.BootLoader.run(BootLoader.java:285) at java.lang.reflect.Method.invoke(Native Method) at org.eclipse.core.launcher.Main.basicRun(Main.java:151) at org.eclipse.core.launcher.Main.run(Main.java:502) at org.eclipse.core.launcher.UIMain.main(UIMain.java:52) 1=============</children>=============
Oops, I introduced this problem as a result of some builder changes. Basically I was trying to "fake out" builders that were missing. The problem is these fake builders had no tree, thus causing the NPE on shutdown. I have fixed up the builder code, and added some safety checking in the SaveManager code as well.
Fixed in v207