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

Bug 312028

Summary: Riena SWT Example application does not stop properly
Product: [RT] Riena Reporter: Stefan Liebig <Stefan.Liebig>
Component: UIAssignee: Nobody - feel free to take it <nobody>
Status: RESOLVED FIXED QA Contact:
Severity: major    
Priority: P3 CC: nobody
Version: 1.2.0   
Target Milestone: ---   
Hardware: PC   
OS: Windows XP   
Whiteboard:

Description Stefan Liebig CLA 2010-05-07 05:26:22 EDT
The application will not close completely (UI disappears but JVM is still there) when opening a lot of the "playground" > "playground" sub/modules.
When started within the debugger you can see the the main thread is waiting:

Thread.sleep(long) line: not available [native method]	
SwtUISynchronizer.waitForDisplay(int) line: 201	
SwtUISynchronizer.execute(SwtUISynchronizer$Executor, Runnable) line: 59	
SwtUISynchronizer.syncExec(Runnable) line: 43	
UICallbackDispatcher.synchronize(Runnable) line: 193	
UICallbackDispatcher.jobDone() line: 137	
UICallbackDispatcher.access$1(UICallbackDispatcher) line: 136	
UICallbackDispatcher$1.done(IJobChangeEvent) line: 92	
JobListeners$3.notify(IJobChangeListener, IJobChangeEvent) line: 39	
JobListeners.doNotify(JobListeners$IListenerDoit, IJobChangeEvent) line: 112	
JobListeners.done(Job, IStatus, boolean) line: 152	
JobManager.cancel(InternalJob) line: 324	
SimpleSender$Sender(InternalJob).cancel() line: 187	
SimpleSender$Sender(Job).cancel() line: 195	
SimpleSender.stop() line: 137	
Aggregator.stopSender() line: 163	
Aggregator.update(IClientInfoProviderExtension) line: 110	
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: 585	
ExtensionInjector.update(Object[]) line: 346	
ExtensionInjector.stop() line: 205	
AggregatorWiring.unwire(Object, BundleContext) line: 43	
WirePuller.stop() line: 83	
WirePuller$BundleStoppingListener.bundleChanged(BundleEvent) line: 199	
BundleContextImpl.dispatchEvent(Object, Object, int, Object) line: 919	
EventManager.dispatchEvent(Set, EventDispatcher, int, Object) line: 227	
ListenerQueue.dispatchEventSynchronous(int, Object) line: 149	
Framework.publishBundleEventPrivileged(BundleEvent) line: 1355	
Framework.publishBundleEvent(int, Bundle) line: 1306	
BundleHost.stopWorker(int) line: 497	
BundleHost(AbstractBundle).suspend(boolean) line: 550	
Framework.suspendBundle(AbstractBundle, boolean) line: 1103	
StartLevelManager.decFWSL(int, AbstractBundle[]) line: 597	
StartLevelManager.doSetStartLevel(int) line: 257	
StartLevelManager.shutdown() line: 215	
InternalSystemBundle.suspend() line: 266	
Framework.shutdown(int) line: 690	
Framework.close() line: 588	
EclipseStarter.shutdown() line: 415	
EclipseStarter.run(String[], Runnable) line: 198	
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: 585	
Main.invokeFramework(String[], URL[]) line: 619	
Main.basicRun(String[]) line: 574	
Main.run(String[]) line: 1407	
Main.main(String[]) line: 1383
Comment 1 Stefan Liebig CLA 2010-05-07 05:28:17 EDT
Suspending the main-Thread to some other time shows:

Unsafe.park(boolean, long) line: not available [native method]	
LockSupport.park() line: 118	
AbstractQueuedSynchronizer.parkAndCheckInterrupt() line: 681	
CountDownLatch$Sync(AbstractQueuedSynchronizer).doAcquireSharedInterruptibly(int) line: 837	
CountDownLatch$Sync(AbstractQueuedSynchronizer).acquireSharedInterruptibly(int) line: 1144	
SwtUISynchronizer$FutureSyncLatch(CountDownLatch).await() line: 199	
SwtUISynchronizer$FutureSyncLatch.await() line: 158	
SwtUISynchronizer.waitForDisplayInitialisation(Runnable) line: 137	
SwtUISynchronizer.execute(SwtUISynchronizer$Executor, Runnable) line: 68	
SwtUISynchronizer.syncExec(Runnable) line: 43	
UICallbackDispatcher.synchronize(Runnable) line: 193	
UICallbackDispatcher.jobDone() line: 137	
UICallbackDispatcher.access$1(UICallbackDispatcher) line: 136	
UICallbackDispatcher$1.done(IJobChangeEvent) line: 92	
JobListeners$3.notify(IJobChangeListener, IJobChangeEvent) line: 39	
JobListeners.doNotify(JobListeners$IListenerDoit, IJobChangeEvent) line: 112	
JobListeners.done(Job, IStatus, boolean) line: 152	
JobManager.cancel(InternalJob) line: 324	
SimpleSender$Sender(InternalJob).cancel() line: 187	
SimpleSender$Sender(Job).cancel() line: 195	
SimpleSender.stop() line: 137	
Aggregator.stopSender() line: 163	
Aggregator.update(IClientInfoProviderExtension) line: 110	
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: 585	
ExtensionInjector.update(Object[]) line: 346	
ExtensionInjector.stop() line: 205	
AggregatorWiring.unwire(Object, BundleContext) line: 43	
WirePuller.stop() line: 83	
WirePuller$BundleStoppingListener.bundleChanged(BundleEvent) line: 199	
BundleContextImpl.dispatchEvent(Object, Object, int, Object) line: 919	
EventManager.dispatchEvent(Set, EventDispatcher, int, Object) line: 227	
ListenerQueue.dispatchEventSynchronous(int, Object) line: 149	
Framework.publishBundleEventPrivileged(BundleEvent) line: 1355	
Framework.publishBundleEvent(int, Bundle) line: 1306	
BundleHost.stopWorker(int) line: 497	
BundleHost(AbstractBundle).suspend(boolean) line: 550	
Framework.suspendBundle(AbstractBundle, boolean) line: 1103	
StartLevelManager.decFWSL(int, AbstractBundle[]) line: 597	
StartLevelManager.doSetStartLevel(int) line: 257	
StartLevelManager.shutdown() line: 215	
InternalSystemBundle.suspend() line: 266	
Framework.shutdown(int) line: 690	
Framework.close() line: 588	
EclipseStarter.shutdown() line: 415	
EclipseStarter.run(String[], Runnable) line: 198	
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: 585	
Main.invokeFramework(String[], URL[]) line: 619	
Main.basicRun(String[]) line: 574	
Main.run(String[]) line: 1407	
Main.main(String[]) line: 1383
Comment 2 Nobody - feel free to take it CLA 2010-05-07 06:39:49 EDT
There is a new mechanism in SWTUISynchronizer to wait for the display. If the workbench has allready been shutdown the described behaviour can be reproduced.
Comment 3 Nobody - feel free to take it CLA 2010-05-07 06:41:37 EDT
Fixed. Now the state "shutdown" of the workbench is respected.