[
https://issues.jboss.org/browse/JBIDE-23757?page=com.atlassian.jira.plugi...
]
Rob Stryker resolved JBIDE-23757.
---------------------------------
Resolution: Done
* c045711 - JBIDE-23757 - fix deadlock in UnitedServerManagerListener (again) (65 seconds
ago) <Rob Stryker>
My tracing through has shown that this fixes the deadlock. By ensuring that further
listeners are added in a job, the start() method doesn't block and completes, allowing
the server view to release it's lock on the given servers, which then allows the
UnitedServerManagerListener's spawned thread to complete afterwards.
Thread deadlock when starting Eclipse
-------------------------------------
Key: JBIDE-23757
URL:
https://issues.jboss.org/browse/JBIDE-23757
Project: Tools (JBoss Tools)
Issue Type: Bug
Components: server
Affects Versions: 4.4.2.Final
Environment: MacOS Sierra, JDK 1.8.0_112
Reporter: Jon Kranes
Assignee: Rob Stryker
Fix For: 4.4.3.Final
Steps to reproduce:
* Install latest Eclipse (Neon 4.6.2) (also tested with Spring ToolSuite 3.8.3 with same
result)
* Install JBoss AS, Wildfly & EAP Server Tools from JBoss Tools 4.4.2 Final
* Add Wildfly 10.x runtime to Eclipse (tested 10.0 and 10.1 with same results)
* Add Wildfly 10.x server to Eclipse
* Create a default Maven Web App project
* Add the web app project to the Wildfly server
* Exit Eclipse and restart
Eclipse hangs on startup with a thread deadlock. Eclipse "Progress" window
shows "Registering Listeners" which never completes and blocks other Eclipse
startup tasks. At this point Eclipse cannot exit and must be force-quit.
Thread dump output from jvisualvm shows a thread deadlock:
Found one Java-level deadlock:
=============================
"Thread-8":
waiting to lock monitor 0x000000011fe4e758 (object 0x0000000782b7aa00, a
org.eclipse.wst.server.core.internal.Server),
which is held by "Worker-0"
"Worker-0":
waiting to lock monitor 0x0000000101a566e8 (object 0x0000000782b7aa70, a
org.jboss.ide.eclipse.as.core.server.UnitedServerListenerManager),
which is held by "Thread-8"
Java stack information for the threads listed above:
===================================================
"Thread-8":
at
org.eclipse.wst.server.core.internal.Server.getServerNotificationManager(Server.java:1034)
- waiting to lock <0x0000000782b7aa00> (a
org.eclipse.wst.server.core.internal.Server)
at org.eclipse.wst.server.core.internal.Server.removeServerListener(Server.java:697)
at
org.jboss.ide.eclipse.as.core.server.UnitedServerListenerManager.protectAddManagerAsListeners(UnitedServerListenerManager.java:152)
- locked <0x0000000782b7aa70> (a
org.jboss.ide.eclipse.as.core.server.UnitedServerListenerManager)
at
org.jboss.ide.eclipse.as.core.server.UnitedServerListenerManager.initializeManager(UnitedServerListenerManager.java:81)
at
org.jboss.ide.eclipse.as.core.server.UnitedServerListenerManager.access$1(UnitedServerListenerManager.java:73)
at
org.jboss.ide.eclipse.as.core.server.UnitedServerListenerManager$1.run(UnitedServerListenerManager.java:68)
"Worker-0":
at
org.jboss.ide.eclipse.as.core.server.UnitedServerListenerManager.addListener(UnitedServerListenerManager.java:109)
- waiting to lock <0x0000000782b7aa70> (a
org.jboss.ide.eclipse.as.core.server.UnitedServerListenerManager)
at
org.jboss.ide.eclipse.as.core.JBossServerCorePlugin.start(JBossServerCorePlugin.java:74)
at
org.eclipse.osgi.internal.framework.BundleContextImpl$3.run(BundleContextImpl.java:774)
at
org.eclipse.osgi.internal.framework.BundleContextImpl$3.run(BundleContextImpl.java:1)
at java.security.AccessController.doPrivileged(Native Method)
at
org.eclipse.osgi.internal.framework.BundleContextImpl.startActivator(BundleContextImpl.java:767)
at
org.eclipse.osgi.internal.framework.BundleContextImpl.start(BundleContextImpl.java:724)
at
org.eclipse.osgi.internal.framework.EquinoxBundle.startWorker0(EquinoxBundle.java:932)
at
org.eclipse.osgi.internal.framework.EquinoxBundle$EquinoxModule.startWorker(EquinoxBundle.java:309)
at org.eclipse.osgi.container.Module.doStart(Module.java:581)
at org.eclipse.osgi.container.Module.start(Module.java:449)
at org.eclipse.osgi.framework.util.SecureAction.start(SecureAction.java:470)
at
org.eclipse.osgi.internal.hooks.EclipseLazyStarter.postFindLocalClass(EclipseLazyStarter.java:107)
at
org.eclipse.osgi.internal.loader.classpath.ClasspathManager.findLocalClass(ClasspathManager.java:529)
at
org.eclipse.osgi.internal.loader.ModuleClassLoader.findLocalClass(ModuleClassLoader.java:325)
at org.eclipse.osgi.internal.loader.BundleLoader.findLocalClass(BundleLoader.java:345)
at
org.eclipse.osgi.internal.loader.BundleLoader.findClassInternal(BundleLoader.java:423)
at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:372)
at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:364)
at
org.eclipse.osgi.internal.loader.ModuleClassLoader.loadClass(ModuleClassLoader.java:161)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
at org.eclipse.osgi.internal.framework.EquinoxBundle.loadClass(EquinoxBundle.java:564)
at
org.eclipse.core.internal.registry.osgi.RegistryStrategyOSGI.createExecutableExtension(RegistryStrategyOSGI.java:174)
at
org.eclipse.core.internal.registry.ExtensionRegistry.createExecutableExtension(ExtensionRegistry.java:905)
at
org.eclipse.core.internal.registry.ConfigurationElement.createExecutableExtension(ConfigurationElement.java:243)
at
org.eclipse.core.internal.registry.ConfigurationElementHandle.createExecutableExtension(ConfigurationElementHandle.java:55)
at
org.eclipse.wst.server.core.internal.ServerType.createServerDelegate(ServerType.java:91)
at org.eclipse.wst.server.core.internal.Server.getDelegate(Server.java:506)
- locked <0x0000000782b7aa00> (a org.eclipse.wst.server.core.internal.Server)
at org.eclipse.wst.server.core.internal.Server.getChildModules(Server.java:2634)
at org.eclipse.wst.server.core.internal.Server.visitModule(Server.java:3058)
at org.eclipse.wst.server.core.internal.Server.visit(Server.java:3039)
at org.eclipse.wst.server.core.internal.Server.getAllModules(Server.java:1542)
at org.eclipse.wst.server.ui.internal.cnf.ServersView2$3.run(ServersView2.java:189)
at org.eclipse.core.internal.jobs.Worker.run(Worker.java:55)
Found 1 deadlock.
--
This message was sent by Atlassian JIRA
(v7.2.3#72005)