Some Eclipse Foundation services are deprecated, or will be soon. Please ensure you've read this important communication.
Bug 356134 - NPE during display dispose
Summary: NPE during display dispose
Status: RESOLVED FIXED
Alias: None
Product: RAP
Classification: RT
Component: Workbench (show other bugs)
Version: 1.5   Edit
Hardware: All All
: P3 normal (vote)
Target Milestone: 1.5 M2   Edit
Assignee: Project Inbox CLA
QA Contact:
URL:
Whiteboard:
Keywords:
Depends on:
Blocks:
 
Reported: 2011-08-29 20:01 EDT by Chris Fairhall CLA
Modified: 2011-08-30 02:44 EDT (History)
0 users

See Also:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Chris Fairhall CLA 2011-08-29 20:01:46 EDT
Build Identifier: 1.5.0-M1-20110816-0926

I have a UIForms FormEditor with a Secion on it. This is running as a WAR inside JBoss (essentially tomcat)
When try to shutdown JBoss gracefully I occasionaly (most of the time...) get this stack trace which seems to stop things gracefully shutting down.

Looks like the Dispose listener the Section adds to itself calls Section.applyBackgroundGradient() which in turn tries to get the ClientArea and ends up in the NPE. Most likely because the servlet container is shutting down so ServletContextAdapter nolonger has had its ProxyContext destroyed.

There should be some graceful way to handle this in general. Maybe somewhere in the org.eclipse.rwt.internal.engine/service classes that end up accessing the ServletContextAdaptor.

It would also make things more robust if an exception in a dispose listener didn't bubble itself all the way up to the call to Display.dispose(). This causes the Display.release method to not trigger disposeExec's and not release/dispose its Synchronizer/Scheduler


java.lang.NullPointerException
        at org.eclipse.equinox.http.servlet.internal.ServletContextAdaptor.getAttribute(ServletContextAdaptor.java:60)
        at org.eclipse.rwt.internal.engine.ApplicationContextUtil.get(ApplicationContextUtil.java:48)
        at org.eclipse.rwt.internal.service.ServiceContext.getApplicationContextFromServletContext(ServiceContext.java:176)
        at org.eclipse.rwt.internal.service.ServiceContext.getApplicationContext(ServiceContext.java:150)
        at org.eclipse.rwt.internal.engine.ApplicationContextUtil.getInstance(ApplicationContextUtil.java:77)
        at org.eclipse.rwt.internal.engine.RWTFactory.getThemeManager(RWTFactory.java:67)
        at org.eclipse.swt.widgets.Widget.getAdapter(Widget.java:175)
        at org.eclipse.swt.widgets.Control.getAdapter(Control.java:1455)
        at org.eclipse.swt.widgets.Composite.getAdapter(Composite.java:118)
        at org.eclipse.swt.widgets.Canvas.getAdapter(Canvas.java:102)
        at org.eclipse.swt.widgets.Control.getBorderWidth(Control.java:1132)
        at org.eclipse.swt.widgets.Scrollable.getClientArea(Scrollable.java:88)
        at org.eclipse.ui.forms.widgets.Section.applyBackgroundGradient(Section.java:496)
        at org.eclipse.ui.forms.widgets.Section.access$2(Section.java:487)
        at org.eclipse.ui.forms.widgets.Section$1.handleEvent(Section.java:101)
        at org.eclipse.swt.internal.widgets.UntypedEventAdapter.dispatchEvent(UntypedEventAdapter.java:652)
        at org.eclipse.swt.internal.widgets.UntypedEventAdapter.widgetDisposed(UntypedEventAdapter.java:78)
        at org.eclipse.swt.events.DisposeEvent.dispatchToObserver(DisposeEvent.java:64)
        at org.eclipse.rwt.internal.events.Event.processEvent(Event.java:44)
        at org.eclipse.swt.events.TypedEvent.processEvent(TypedEvent.java:161)
        at org.eclipse.swt.widgets.Widget.dispose(Widget.java:770)
        at org.eclipse.swt.widgets.Composite.releaseChildren(Composite.java:822)
        at org.eclipse.swt.widgets.Widget.dispose(Widget.java:773)
        at org.eclipse.swt.widgets.Composite.releaseChildren(Composite.java:822)
        at org.eclipse.swt.widgets.Widget.dispose(Widget.java:773)
        at org.eclipse.swt.widgets.Composite.releaseChildren(Composite.java:822)
        at org.eclipse.swt.widgets.Widget.dispose(Widget.java:773)
        at org.eclipse.swt.custom.ScrolledComposite.dispose(ScrolledComposite.java:660)
        at org.eclipse.swt.widgets.Composite.releaseChildren(Composite.java:822)
        at org.eclipse.swt.widgets.Widget.dispose(Widget.java:773)
        at org.eclipse.swt.widgets.Composite.releaseChildren(Composite.java:822)
        at org.eclipse.swt.widgets.Widget.dispose(Widget.java:773)
        at org.eclipse.swt.widgets.Composite.releaseChildren(Composite.java:822)
        at org.eclipse.swt.widgets.Widget.dispose(Widget.java:773)
        at org.eclipse.swt.widgets.Composite.releaseChildren(Composite.java:822)
        at org.eclipse.swt.widgets.Widget.dispose(Widget.java:773)
        at org.eclipse.swt.widgets.Composite.releaseChildren(Composite.java:822)
        at org.eclipse.swt.widgets.Widget.dispose(Widget.java:773)
        at org.eclipse.swt.widgets.Composite.releaseChildren(Composite.java:822)
        at org.eclipse.swt.widgets.Widget.dispose(Widget.java:773)
        at org.eclipse.swt.widgets.Composite.releaseChildren(Composite.java:822)
        at org.eclipse.swt.widgets.Widget.dispose(Widget.java:773)
        at org.eclipse.swt.widgets.Composite.releaseChildren(Composite.java:822)
        at org.eclipse.swt.widgets.Widget.dispose(Widget.java:773)
        at org.eclipse.swt.widgets.Composite.releaseChildren(Composite.java:822)
        at org.eclipse.swt.widgets.Shell.releaseChildren(Shell.java:1098)
        at org.eclipse.swt.widgets.Widget.dispose(Widget.java:773)
        at org.eclipse.swt.widgets.Display.disposeShells(Display.java:725)
        at org.eclipse.swt.widgets.Display.release(Display.java:689)

Reproducible: Sometimes

Steps to Reproduce:
Looks like it only happens when a session has a FormEditor with a Section open
Comment 1 Ivan Furnadjiev CLA 2011-08-30 02:44:49 EDT
Fixed in CVS HEAD by not applying the background gradient in the dispose event.