Some Eclipse Foundation services are deprecated, or will be soon. Please ensure you've read this important communication.

Bug 316363

Summary: SWTExceptions with @UIEventTopic on bundle shutdown
Product: z_Archived Reporter: Brian de Alwis <bsd>
Component: E4Assignee: Project Inbox <e4.runtime-inbox>
Status: RESOLVED FIXED QA Contact:
Severity: normal    
Priority: P3 CC: ob1.eclipse
Version: unspecified   
Target Milestone: ---   
Hardware: Macintosh   
OS: Mac OS X   
Whiteboard:
Attachments:
Description Flags
Patch none

Description Brian de Alwis CLA 2010-06-09 15:26:18 EDT
BuildId: HEAD from 2010/06/09 AM

I'm porting the e4rover code to HEAD.  It makes use of the @UIEventTopic annotation.  On shutdown, I get dozens of SWTExceptions like the the following:

***WARNING: Display must be created on main thread due to Cocoa restrictions.
2010-06-09 15:11:28.399 Log ErrorException while dispatching event org.osgi.service.event.Event [topic=org/eclipsecon/e4rover/robot] to handler org.eclipse.e4.ui.internal.di.UIEventObjectSupplier$UIEventHandler@6a581b90
org.eclipse.swt.SWTException: Invalid thread access
	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.Display.error(Display.java:1027)
	at org.eclipse.swt.widgets.Display.createDisplay(Display.java:794)
	at org.eclipse.swt.widgets.Display.create(Display.java:777)
	at org.eclipse.swt.graphics.Device.<init>(Device.java:130)
	at org.eclipse.swt.widgets.Display.<init>(Display.java:668)
	at org.eclipse.swt.widgets.Display.<init>(Display.java:659)
	at org.eclipse.swt.widgets.Display.getDefault(Display.java:1303)
	at org.eclipse.e4.ui.internal.di.UIEventObjectSupplier$UIEventHandler.handleEvent(UIEventObjectSupplier.java:38)
	at org.eclipse.equinox.internal.event.EventHandlerWrapper.handleEvent(EventHandlerWrapper.java:188)
	at org.eclipse.equinox.internal.event.EventHandlerTracker.dispatchEvent(EventHandlerTracker.java:198)
	at org.eclipse.osgi.framework.eventmgr.EventManager.dispatchEvent(EventManager.java:227)
	at org.eclipse.osgi.framework.eventmgr.ListenerQueue.dispatchEventSynchronous(ListenerQueue.java:149)
	at org.eclipse.equinox.internal.event.EventAdminImpl.dispatchEvent(EventAdminImpl.java:139)
	at org.eclipse.equinox.internal.event.EventAdminImpl.sendEvent(EventAdminImpl.java:78)
	at org.eclipse.equinox.internal.event.EventComponent.sendEvent(EventComponent.java:39)
	at org.eclipsecon.e4rover.core.ContestPlatform.fireRobotUpdated(ContestPlatform.java:262)
	at org.eclipsecon.e4rover.core.ContestPlatform.access$7(ContestPlatform.java:260)
	at org.eclipsecon.e4rover.core.ContestPlatform$1.run(ContestPlatform.java:172)
Comment 1 Oleg Besedin CLA 2010-06-14 13:37:41 EDT
Created attachment 171851 [details]
Patch

I am unable to duplicate the problem, but from the call stack it looks like we attempting to create a Display after its instance has been released.

The patch places the initial Display instance in the context for "pure" e4 apps and compatibility. The UI event processing code has been modified to create a warning whenever it receives UI message, but there is no Display available.
Comment 2 Oleg Besedin CLA 2010-06-14 13:38:46 EDT
Patch applied to CVS Head.