| Summary: | [Compatibility] NPE thrown when altering active shell between a dialog's content assist popup and an editor | ||||||||
|---|---|---|---|---|---|---|---|---|---|
| Product: | [Eclipse Project] e4 | Reporter: | Remy Suen <remy.suen> | ||||||
| Component: | UI | Assignee: | Project Inbox <e4.ui-inbox> | ||||||
| Status: | RESOLVED WORKSFORME | QA Contact: | |||||||
| Severity: | normal | ||||||||
| Priority: | P3 | ||||||||
| Version: | 1.0 | ||||||||
| Target Milestone: | --- | ||||||||
| Hardware: | PC | ||||||||
| OS: | Windows 7 | ||||||||
| Whiteboard: | |||||||||
| Attachments: |
|
||||||||
|
Description
Remy Suen
Trace of the root container being set to null on win32. Thread [main] (Suspended (breakpoint at line 100 in PartServiceImpl)) PartServiceImpl.setRootContainer(MElementContainer) line: 100 GeneratedMethodAccessor9.invoke(Object, Object[]) line: not available DelegatingMethodAccessorImpl.invoke(Object, Object[]) line: 25 Method.invoke(Object, Object...) line: 597 MethodRequestor.execute() line: 42 ContextObjectSupplier$ContextInjectionListener.update(IEclipseContext, int, Object[], IContextRecorder) line: 75 TrackableComputationExt.update(ContextChangeEvent) line: 87 EclipseContext.processScheduled(List<Scheduled>) line: 334 EclipseContext.set(String, Object) line: 351 ShellActivationListener$1.run() line: 93 SafeRunner.run(ISafeRunnable) line: 42 ShellActivationListener.activate(Shell) line: 91 ShellActivationListener.handleEvent(Event) line: 78 EventTable.sendEvent(Event) line: 84 Display.filterEvent(Event) line: 1253 Shell(Widget).sendEvent(Event) line: 1052 Shell(Widget).sendEvent(int, Event, boolean) line: 1077 Shell(Widget).sendEvent(int) line: 1058 Shell(Decorations).WM_ACTIVATE(int, int) line: 1635 Shell.WM_ACTIVATE(int, int) line: 2114 Shell(Control).windowProc(int, int, int, int) line: 4157 Shell(Canvas).windowProc(int, int, int, int) line: 341 Shell(Decorations).windowProc(int, int, int, int) line: 1598 Shell.windowProc(int, int, int, int) line: 2038 Display.windowProc(int, int, int, int) line: 4873 OS.DestroyWindow(int) line: not available [native method] Shell(Control).destroyWidget() line: 684 Shell.destroyWidget() line: 697 Shell(Widget).release(boolean) line: 818 Shell(Widget).dispose() line: 446 Shell(Decorations).dispose() line: 447 Shell.dispose() line: 714 ContentProposalAdapter$ContentProposalPopup(Window).close() line: 335 ContentProposalAdapter$ContentProposalPopup(PopupDialog).close() line: 1191 ContentProposalAdapter$ContentProposalPopup.close() line: 915 ContentProposalAdapter$ContentProposalPopup$PopupCloserListener.handleEvent(Event) line: 132 EventTable.sendEvent(Event) line: 84 Shell(Widget).sendEvent(Event) line: 1053 Shell(Widget).sendEvent(int, Event, boolean) line: 1077 Shell(Widget).sendEvent(int) line: 1058 Shell(Decorations).WM_ACTIVATE(int, int) line: 1647 Shell.WM_ACTIVATE(int, int) line: 2114 Shell(Control).windowProc(int, int, int, int) line: 4157 Shell(Canvas).windowProc(int, int, int, int) line: 341 Shell(Decorations).windowProc(int, int, int, int) line: 1598 Shell.windowProc(int, int, int, int) line: 2038 Display.windowProc(int, int, int, int) line: 4873 OS.PeekMessageW(MSG, int, int, int, int) line: not available [native method] OS.PeekMessage(MSG, int, int, int, int) line: 3024 Display.readAndDispatch() line: 3652 PartRenderingEngine$4.run() line: 650 Realm.runWithDefault(Realm, Runnable) line: 332 PartRenderingEngine.run(MApplicationElement, IEclipseContext) line: 578 E4Workbench.createAndRunUI(MApplicationElement) line: 102 Workbench$3.run() line: 537 Realm.runWithDefault(Realm, Runnable) line: 332 Workbench.createAndRunWorkbench(Display, WorkbenchAdvisor) line: 521 PlatformUI.createAndRunWorkbench(Display, WorkbenchAdvisor) line: 149 IDEApplication.start(IApplicationContext) line: 115 EclipseAppHandle.run(Object) line: 196 EclipseAppLauncher.runApplication(Object) line: 110 EclipseAppLauncher.start(Object) line: 79 EclipseStarter.run(Object) line: 369 EclipseStarter.run(String[], Runnable) line: 179 NativeMethodAccessorImpl.invoke0(Method, Object, Object[]) line: not available [native method] NativeMethodAccessorImpl.invoke(Object, Object[]) line: 39 DelegatingMethodAccessorImpl.invoke(Object, Object[]) line: 25 Method.invoke(Object, Object...) line: 597 Main.invokeFramework(String[], URL[]) line: 619 Main.basicRun(String[]) line: 574 Main.run(String[]) line: 1407 Main.main(String[]) line: 1383 Created attachment 172261 [details]
core dump from linux
When I do this on linux, I get a core dump.
PW
The cause of this error comes from the presence of nested dialogs (one parented off the other). When the topmost dialog is disposed, we ask its parent context to reparent itself to the "last known valid child" (per se). But this value may not necessarily be set and so this becomes a no-op. However, the parent context is still pointing at the topmost dialog's context as its active child. The topmost dialog's context is subsequently disposed and all our code that goes down the active chain to query for values will get 'null' back because the chain was never broken (as indicated above) and the bottommost context is a context that has been disposed. Cannot reproduce anymore with I20100706-2130. I'm pretty sure this has been fixed due to bug 316950. Paul, do you still crash or no? Created attachment 173641 [details]
Code dump 2
When I tried this today, I got another core dump
PW
(In reply to comment #5) > Created an attachment (id=173641) [details] > Code dump 2 This appears to be a 3.6 problem, I've opened bug 319119 PW (In reply to comment #6) > This appears to be a 3.6 problem, I've opened bug 319119 Well, we'll wrap this one up then. |