Community
Participate
Working Groups
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
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
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.
Fixed. Now the state "shutdown" of the workbench is respected.