| Summary: | deadlock on shutdown | ||
|---|---|---|---|
| Product: | [Eclipse Project] PDE | Reporter: | Martin Lippert <mlippert> |
| Component: | UI | Assignee: | PDE-UI-Inbox <pde-ui-inbox> |
| Status: | RESOLVED WORKSFORME | QA Contact: | |
| Severity: | normal | ||
| Priority: | P3 | CC: | curtis.windatt.public, Lars.Vogel, timo.kinnunen |
| Version: | 4.2 | Keywords: | helpwanted |
| Target Milestone: | --- | ||
| Hardware: | PC | ||
| OS: | All | ||
| Whiteboard: | |||
|
Description
Martin Lippert
Happened to me exactly like described in comment 0 by opening Eclipse with a default workspace assigned, quickly changing my mind about the startup settings and clicking the top-right workbench close button as soon as it appeared. The deadlock left the saving workspace state progress indicator scrolling endlessly. This happened on Windows 8.1 and Eclipse SDK 4.3.1. Please change the platform to All as there doesn't seem to be anything platform specific in the traces. The problem seems to come from synchronization on the PluginModelManager happening via 2 separate mechanisms, locking the PluginModelManager instance and locking its class. Without enforcing a strict ordering for them a deadlock becomes possible. Here is the trace I got : Found one Java-level deadlock: ============================= "ModalContext": waiting to lock monitor 0x000000002a76a498 (object 0x00000005d6732830, a org.eclipse.pde.internal.core.PluginModelManager), which is held by "Worker-6" "Worker-6": waiting to lock monitor 0x000000002a769af8 (object 0x00000005d67331a0, a java.lang.Class), which is held by "ModalContext" Java stack information for the threads listed above: =================================================== "ModalContext": at org.eclipse.pde.internal.core.PluginModelManager.initializeTable(PluginModelManager.java:504) - waiting to lock <0x00000005d6732830> (a org.eclipse.pde.internal.core.PluginModelManager) at org.eclipse.pde.internal.core.PluginModelManager.getExternalModels(PluginModelManager.java:1025) at org.eclipse.pde.core.plugin.PluginRegistry.getExternalModels(PluginRegistry.java:218) at org.eclipse.pde.internal.core.PDEState.saveExternalState(PDEState.java:366) at org.eclipse.pde.internal.core.PluginModelManager.save(PluginModelManager.java:1107) at org.eclipse.pde.internal.core.PluginModelManager.saveInstance(PluginModelManager.java:185) - locked <0x00000005d67331a0> (a java.lang.Class for org.eclipse.pde.internal.core.PluginModelManager) at org.eclipse.pde.internal.core.PDECore$1.saving(PDECore.java:278) at org.eclipse.core.internal.resources.SaveManager.executeLifecycle(SaveManager.java:383) at org.eclipse.core.internal.resources.SaveManager$1.run(SaveManager.java:192) at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42) at org.eclipse.core.internal.resources.SaveManager.broadcastLifecycle(SaveManager.java:195) at org.eclipse.core.internal.resources.SaveManager.save(SaveManager.java:1130) at org.eclipse.core.internal.resources.Workspace.save(Workspace.java:2376) at org.eclipse.ui.internal.ide.application.IDEWorkbenchAdvisor$5.run(IDEWorkbenchAdvisor.java:508) at org.eclipse.jface.operation.ModalContext$ModalContextThread.run(ModalContext.java:121) "Worker-6": at org.eclipse.pde.internal.core.PluginModelManager.getInstance(PluginModelManager.java:174) - waiting to lock <0x00000005d67331a0> (a java.lang.Class for org.eclipse.pde.internal.core.PluginModelManager) at org.eclipse.pde.internal.core.PDECore.getModelManager(PDECore.java:182) at org.eclipse.pde.internal.core.PDERegistryStrategy.connectListeners(PDERegistryStrategy.java:138) at org.eclipse.pde.internal.core.PDERegistryStrategy.init(PDERegistryStrategy.java:126) at org.eclipse.pde.internal.core.PDERegistryStrategy.<init>(PDERegistryStrategy.java:120) at org.eclipse.pde.internal.core.PDEExtensionRegistry.<init>(PDEExtensionRegistry.java:45) at org.eclipse.pde.internal.core.PDECore.getExtensionsRegistry(PDECore.java:209) - locked <0x00000005d5cff278> (a org.eclipse.pde.internal.core.PDECore) at org.eclipse.pde.internal.core.PluginModelManager.initializeTable(PluginModelManager.java:554) - locked <0x00000005d6732830> (a org.eclipse.pde.internal.core.PluginModelManager) at org.eclipse.pde.internal.core.PluginModelManager.findModel(PluginModelManager.java:902) at org.eclipse.pde.core.plugin.PluginRegistry.findModel(PluginRegistry.java:110) at org.eclipse.pde.internal.core.RequiredPluginsInitializer.initialize(RequiredPluginsInitializer.java:27) at org.eclipse.jdt.internal.core.JavaModelManager.initializeContainer(JavaModelManager.java:2891) at org.eclipse.jdt.internal.core.JavaModelManager$9.run(JavaModelManager.java:2797) at org.eclipse.core.internal.resources.Workspace.run(Workspace.java:2345) at org.eclipse.jdt.internal.core.JavaModelManager.initializeAllContainers(JavaModelManager.java:2837) at org.eclipse.jdt.internal.core.JavaModelManager.getClasspathContainer(JavaModelManager.java:1921) at org.eclipse.jdt.core.JavaCore.initializeAfterLoad(JavaCore.java:4018) at org.eclipse.jdt.internal.ui.InitializeAfterLoadJob$RealJob.run(InitializeAfterLoadJob.java:36) at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) Found 1 deadlock. Martin, can you still reproduce with a recent release? I haven't seen this again in a long time. Thanks for the feedback, Martin. |