Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- Looks like the problem is a combination of several small things that happened at the same time. The interesting code parts:
- public abstract class EventManager {
- protected synchronized final void addListenerObject(final Object listener) {
- if (listenerList == null) {
- listenerList = new ListenerList(ListenerList.IDENTITY);
- }
- listenerList.add(listener);
- }
- ...
- public class ExtdocView{
- @Subscribe
- @AllowConcurrentEvents
- public void onJavaSelection(final JavaSelectionEvent selection) {
- disposeScheduler();
- syncScheduling(selection);
- }
- private synchronized syncScheduling(final JavaSelectionEvent selection) {
- scheduler = new ProviderExecutionScheduler(providers, subscriptionManager, contentPart, extdocBus);
- scheduler.scheduleOnSelection(selection); // this one spawns a Display.syncExec... omitted.
- }
- ...
- 2012-01-13 18:11:27
- Full thread dump Java HotSpot(TM) 64-Bit Server VM (20.1-b02-384 mixed mode):
- "pool-1-thread-3" prio=5 tid=1019fc000 nid=0x122da1000 waiting for monitor entry [122da0000]
- java.lang.Thread.State: BLOCKED (on object monitor)
- at org.eclipse.recommenders.internal.extdoc.rcp.ui.ExtdocView.syncScheduling(ExtdocView.java:126)
- - waiting to lock <7b4621338> (a org.eclipse.recommenders.internal.extdoc.rcp.ui.ExtdocView)
- at org.eclipse.recommenders.internal.extdoc.rcp.ui.ExtdocView.onJavaSelection(ExtdocView.java:122)
- at sun.reflect.GeneratedMethodAccessor14.invoke(Unknown Source)
- at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
- at java.lang.reflect.Method.invoke(Method.java:597)
- at com.google.common.eventbus.EventHandler.handleEvent(EventHandler.java:68)
- at com.google.common.eventbus.EventBus.dispatch(EventBus.java:313)
- at com.google.common.eventbus.AsyncEventBus.access$0(AsyncEventBus.java:1)
- at com.google.common.eventbus.AsyncEventBus$1.run(AsyncEventBus.java:94)
- at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
- at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
- at java.lang.Thread.run(Thread.java:680)
- "pool-1-thread-2" prio=5 tid=101b0e000 nid=0x122c9e000 in Object.wait() [122c9d000]
- java.lang.Thread.State: WAITING (on object monitor)
- at java.lang.Object.wait(Native Method)
- - waiting on <7b073ebe8> (a org.eclipse.swt.widgets.RunnableLock)
- at java.lang.Object.wait(Object.java:485)
- at org.eclipse.swt.widgets.Synchronizer.syncExec(Synchronizer.java:187)
- - locked <7b073ebe8> (a org.eclipse.swt.widgets.RunnableLock)
- at org.eclipse.ui.internal.UISynchronizer.syncExec(UISynchronizer.java:150)
- at org.eclipse.swt.widgets.Display.syncExec(Display.java:4620)
- at org.eclipse.recommenders.internal.extdoc.rcp.scheduling.ProviderExecutionScheduler.createNewRenderingPanelInUiThread(ProviderExecutionScheduler.java:140)
- at org.eclipse.recommenders.internal.extdoc.rcp.scheduling.ProviderExecutionScheduler.scheduleOnSelection(ProviderExecutionScheduler.java:101)
- at org.eclipse.recommenders.internal.extdoc.rcp.ui.ExtdocView.syncScheduling(ExtdocView.java:127)
- - locked <7b4621338> (a org.eclipse.recommenders.internal.extdoc.rcp.ui.ExtdocView)
- at org.eclipse.recommenders.internal.extdoc.rcp.ui.ExtdocView.onJavaSelection(ExtdocView.java:122)
- at sun.reflect.GeneratedMethodAccessor14.invoke(Unknown Source)
- at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
- at java.lang.reflect.Method.invoke(Method.java:597)
- at com.google.common.eventbus.EventHandler.handleEvent(EventHandler.java:68)
- at com.google.common.eventbus.EventBus.dispatch(EventBus.java:313)
- at com.google.common.eventbus.AsyncEventBus.access$0(AsyncEventBus.java:1)
- at com.google.common.eventbus.AsyncEventBus$1.run(AsyncEventBus.java:94)
- at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
- at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
- at java.lang.Thread.run(Thread.java:680)
- "pool-1-thread-1" prio=5 tid=102f1b000 nid=0x11f4ff000 waiting for monitor entry [11f4fe000]
- java.lang.Thread.State: BLOCKED (on object monitor)
- at org.eclipse.recommenders.internal.extdoc.rcp.ui.ExtdocView.syncScheduling(ExtdocView.java:126)
- - waiting to lock <7b4621338> (a org.eclipse.recommenders.internal.extdoc.rcp.ui.ExtdocView)
- at org.eclipse.recommenders.internal.extdoc.rcp.ui.ExtdocView.onJavaSelection(ExtdocView.java:122)
- at sun.reflect.GeneratedMethodAccessor14.invoke(Unknown Source)
- at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
- at java.lang.reflect.Method.invoke(Method.java:597)
- at com.google.common.eventbus.EventHandler.handleEvent(EventHandler.java:68)
- at com.google.common.eventbus.EventBus.dispatch(EventBus.java:313)
- at com.google.common.eventbus.AsyncEventBus.access$0(AsyncEventBus.java:1)
- at com.google.common.eventbus.AsyncEventBus$1.run(AsyncEventBus.java:94)
- at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
- at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
- at java.lang.Thread.run(Thread.java:680)
- "Thread-1" daemon prio=6 tid=102889000 nid=0x7fff701efcc0 waiting for monitor entry [7fff5fbfa000]
- java.lang.Thread.State: BLOCKED (on object monitor)
- at org.eclipse.core.commands.common.EventManager.addListenerObject(EventManager.java:50)
- - waiting to lock <7b4621338> (a org.eclipse.recommenders.internal.extdoc.rcp.ui.ExtdocView)
- at org.eclipse.ui.part.WorkbenchPart.addPropertyListener(WorkbenchPart.java:87)
- at org.eclipse.ui.internal.BaseSaveAction.setActiveView(BaseSaveAction.java:208)
- at org.eclipse.ui.internal.BaseSaveAction.updateActiveView(BaseSaveAction.java:168)
- at org.eclipse.ui.internal.BaseSaveAction.partActivated(BaseSaveAction.java:133)
- at org.eclipse.ui.internal.PartService$1.run(PartService.java:76)
- at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42)
- at org.eclipse.ui.internal.PartService.partActivated(PartService.java:74)
- at org.eclipse.ui.internal.WorkbenchPage$11.run(WorkbenchPage.java:3974)
- at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42)
- at org.eclipse.ui.internal.WorkbenchPage.firePartActivated(WorkbenchPage.java:3972)
- at org.eclipse.ui.internal.WorkbenchPage.access$13(WorkbenchPage.java:3961)
- at org.eclipse.ui.internal.WorkbenchPage$E4PartListener.partActivated(WorkbenchPage.java:163)
- at org.eclipse.e4.ui.internal.workbench.PartServiceImpl$2.run(PartServiceImpl.java:190)
- at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42)
- at org.eclipse.e4.ui.internal.workbench.PartServiceImpl.firePartActivated(PartServiceImpl.java:188)
- at org.eclipse.e4.ui.internal.workbench.PartServiceImpl.setPart(PartServiceImpl.java:163)
- at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
- at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
- at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
- at java.lang.reflect.Method.invoke(Method.java:597)
- at org.eclipse.e4.core.internal.di.MethodRequestor.execute(MethodRequestor.java:56)
- at org.eclipse.e4.core.internal.contexts.ContextObjectSupplier$ContextInjectionListener.update(ContextObjectSupplier.java:77)
- at org.eclipse.e4.core.internal.contexts.TrackableComputationExt.update(TrackableComputationExt.java:106)
- at org.eclipse.e4.core.internal.contexts.EclipseContext.processScheduled(EclipseContext.java:298)
- at org.eclipse.e4.core.internal.contexts.EclipseContext.set(EclipseContext.java:312)
- at org.eclipse.e4.core.internal.contexts.EclipseContext.activate(EclipseContext.java:598)
- at org.eclipse.e4.core.internal.contexts.EclipseContext.activateBranch(EclipseContext.java:603)
- at org.eclipse.e4.ui.internal.workbench.PartActivationHistory.activate(PartActivationHistory.java:52)
- at org.eclipse.e4.ui.internal.workbench.PartServiceImpl.activate(PartServiceImpl.java:560)
- at org.eclipse.e4.ui.internal.workbench.PartServiceImpl.activate(PartServiceImpl.java:531)
- at org.eclipse.e4.ui.internal.workbench.swt.AbstractPartRenderer.activate(AbstractPartRenderer.java:105)
- at org.eclipse.e4.ui.workbench.renderers.swt.StackRenderer$ActivationJob.run(StackRenderer.java:176)
- at org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:35)
- at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:135)
- - locked <7b04087d8> (a org.eclipse.swt.widgets.RunnableLock)
- at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:3945)
- at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3622)
- at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$9.run(PartRenderingEngine.java:999)
- at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332)
- at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.run(PartRenderingEngine.java:893)
- at org.eclipse.e4.ui.internal.workbench.E4Workbench.createAndRunUI(E4Workbench.java:85)
- at org.eclipse.ui.internal.Workbench$4.run(Workbench.java:577)
- at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332)
- at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:532)
- at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149)
- at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:124)
- at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:196)
- at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:110)
- at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:79)
- at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:352)
- at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:179)
- at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
- at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
- at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
- at java.lang.reflect.Method.invoke(Method.java:597)
- at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:624)
- at org.eclipse.equinox.launcher.Main.basicRun(Main.java:579)
- at org.eclipse.equinox.launcher.Main.run(Main.java:1433)
- at org.eclipse.equinox.launcher.Main.main(Main.java:1409)
- new version of syncScheduling (hope this finally fixes the deadlock...):
- private final Lock initalizeSchedulerLock = new ReentrantLock();
- private void syncScheduling(final JavaSelectionEvent selection) {
- try {
- initalizeSchedulerLock.lock();
- scheduler = new ProviderExecutionScheduler(providers, subscriptionManager, contentPart, extdocBus);
- scheduler.scheduleOnSelection(selection);
- } finally {
- initalizeSchedulerLock.unlock();
- }
- }
Add Comment
Please, Sign In to add comment