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

Bug 378208

Summary: deadlock on shutdown
Product: [Eclipse Project] PDE Reporter: Martin Lippert <mlippert>
Component: UIAssignee: 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.2Keywords: helpwanted
Target Milestone: ---   
Hardware: PC   
OS: All   
Whiteboard:

Description Martin Lippert CLA 2012-05-02 03:21:57 EDT
Running Juno M6, I am shutting down my Eclipse installation quickly after it started (shortly after showing the workbench), and got this deadlock:


Found one Java-level deadlock:
=============================
"ModalContext":
  waiting to lock monitor 1010292f8 (object 7c9baac80, a org.eclipse.pde.internal.core.PluginModelManager),
  which is held by "Worker-5"
"Worker-5":
  waiting to lock monitor 101029e20 (object 7f50be5e0, 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:503)
	- waiting to lock <7c9baac80> (a org.eclipse.pde.internal.core.PluginModelManager)
	at org.eclipse.pde.internal.core.PluginModelManager.getExternalModels(PluginModelManager.java:1024)
	at org.eclipse.pde.core.plugin.PluginRegistry.getExternalModels(PluginRegistry.java:218)
	at org.eclipse.pde.internal.core.PDEState.saveExternalState(PDEState.java:370)
	at org.eclipse.pde.internal.core.PluginModelManager.save(PluginModelManager.java:1106)
	at org.eclipse.pde.internal.core.PluginModelManager.saveInstance(PluginModelManager.java:183)
	- locked <7f50be5e0> (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:2375)
	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-5":
	at org.eclipse.pde.internal.core.PluginModelManager.getInstance(PluginModelManager.java:172)
	- waiting to lock <7f50be5e0> (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:41)
	at org.eclipse.pde.internal.core.PDECore.getExtensionsRegistry(PDECore.java:209)
	- locked <7c99e2db8> (a org.eclipse.pde.internal.core.PDECore)
	at org.eclipse.pde.internal.core.PluginModelManager.initializeTable(PluginModelManager.java:553)
	- locked <7c9baac80> (a org.eclipse.pde.internal.core.PluginModelManager)
	at org.eclipse.pde.internal.core.PluginModelManager.findModel(PluginModelManager.java:901)
	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:2851)
	at org.eclipse.jdt.internal.core.JavaModelManager$9.run(JavaModelManager.java:2757)
	at org.eclipse.core.internal.resources.Workspace.run(Workspace.java:2344)
	at org.eclipse.jdt.internal.core.JavaModelManager.initializeAllContainers(JavaModelManager.java:2797)
	at org.eclipse.jdt.internal.core.JavaModelManager.getClasspathContainer(JavaModelManager.java:1875)
	at org.eclipse.jdt.core.JavaCore.initializeAfterLoad(JavaCore.java:3865)
	at org.eclipse.jdt.internal.ui.InitializeAfterLoadJob$RealJob.run(InitializeAfterLoadJob.java:36)
	at org.eclipse.core.internal.jobs.Worker.run(Worker.java:54)

Found 1 deadlock.
Comment 1 Timo Kinnunen CLA 2014-01-18 02:03:41 EST
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.
Comment 2 Lars Vogel CLA 2019-09-05 09:58:23 EDT
Martin, can you still reproduce with a recent release?
Comment 3 Martin Lippert CLA 2019-09-05 09:59:42 EDT
I haven't seen this again in a long time.
Comment 4 Lars Vogel CLA 2019-09-05 10:01:58 EDT
Thanks for the feedback, Martin.