Description
When running a large workspace with many spring project for a while, specially if the machine was resumed after sleep, working Java classes cause the deadlock. The java class operation which cause this deadlock is trying to ctrl + hover over a typename to get the hyperlink list. With this versions the Java element hyperlink list is also slow because the language server takes time to respond for hyperlink commands.
Versions:
Version: 2022-03 (4.23)
Build id: I20220131-0800
STS Versions:
Spring Boot Language Server Feature 4.13.1.202201310830 org.springframework.tooling.boot.ls.feature.feature.group VMware, Inc.
Spring IDE Boot Microservices Dash 4.13.1.202201311003 org.springframework.ide.eclipse.boot.dash.feature.feature.group Spring IDE Developers
Spring Tool Suite 4 Main Feature 4.13.1.202201311003 org.springframework.boot.ide.main.feature.feature.group VMware, Inc.
Spring XML Namespace Support 4.13.1.202201311003 org.springframework.ide.eclipse.xml.namespaces.feature.feature.group VMware, Inc.
Found one Java-level deadlock:
=============================
"ForkJoinPool.commonPool-worker-3":
waiting to lock monitor 0x000001debd592760 (object 0x000000009ab00238, a com.google.common.base.Suppliers$NonSerializableMemoizingSupplier),
which is held by "pool-3-thread-1"
"pool-3-thread-1":
waiting to lock monitor 0x000001deabb9b060 (object 0x000000009ab002c0, a org.springframework.ide.eclipse.boot.dash.BootDashActivator),
which is held by "ForkJoinPool.commonPool-worker-3"
Java stack information for the threads listed above:
===================================================
"ForkJoinPool.commonPool-worker-3":
at com.google.common.base.Suppliers$NonSerializableMemoizingSupplier.get(Suppliers.java:166)
- waiting to lock <0x000000009ab00238> (a com.google.common.base.Suppliers$NonSerializableMemoizingSupplier)
at org.springframework.ide.eclipse.boot.dash.BootDashActivator.getModel(BootDashActivator.java:140)
- locked <0x000000009ab002c0> (a org.springframework.ide.eclipse.boot.dash.BootDashActivator)
at org.springframework.ide.eclipse.boot.dash.cf.BootDashTargetInfoSynchronizer.model(BootDashTargetInfoSynchronizer.java:96)
at org.springframework.ide.eclipse.boot.dash.cf.BootDashTargetInfoSynchronizer.start(BootDashTargetInfoSynchronizer.java:47)
at org.springframework.ide.eclipse.boot.dash.cf.BootDashCfPlugin.lambda$0(BootDashCfPlugin.java:25)
at org.springframework.ide.eclipse.boot.dash.cf.BootDashCfPlugin$$Lambda$1429/0x0000000801fde4e0.run(Unknown Source)
at java.util.concurrent.CompletableFuture$AsyncRun.run(java.base@16.0.1/CompletableFuture.java:1800)
at java.util.concurrent.CompletableFuture$AsyncRun.exec(java.base@16.0.1/CompletableFuture.java:1792)
at java.util.concurrent.ForkJoinTask.doExec(java.base@16.0.1/ForkJoinTask.java:295)
at java.util.concurrent.ForkJoinPool$WorkQueue.topLevelExec(java.base@16.0.1/ForkJoinPool.java:1016)
at java.util.concurrent.ForkJoinPool.scan(java.base@16.0.1/ForkJoinPool.java:1665)
at java.util.concurrent.ForkJoinPool.runWorker(java.base@16.0.1/ForkJoinPool.java:1598)
at java.util.concurrent.ForkJoinWorkerThread.run(java.base@16.0.1/ForkJoinWorkerThread.java:183)
"pool-3-thread-1":
at org.eclipse.ui.plugin.AbstractUIPlugin.getPreferenceStore(AbstractUIPlugin.java:250)
- waiting to lock <0x000000009ab002c0> (a org.springframework.ide.eclipse.boot.dash.BootDashActivator)
at org.springframework.ide.eclipse.boot.dash.model.DefaultBootDashModelContext.<init>(DefaultBootDashModelContext.java:51)
at org.springframework.ide.eclipse.boot.dash.model.DefaultBootDashModelContext.create(DefaultBootDashModelContext.java:67)
at org.springframework.ide.eclipse.boot.dash.BootDashActivator.lambda$0(BootDashActivator.java:136)
at org.springframework.ide.eclipse.boot.dash.BootDashActivator$$Lambda$1418/0x0000000801fd1758.get(Unknown Source)
at com.google.common.base.Suppliers$NonSerializableMemoizingSupplier.get(Suppliers.java:167)
- locked <0x000000009ab00238> (a com.google.common.base.Suppliers$NonSerializableMemoizingSupplier)
at org.springframework.ide.eclipse.boot.dash.BootDashActivator.getInjections(BootDashActivator.java:149)
at org.springframework.ide.eclipse.boot.dash.remoteapps.RemoteAppsFromBootDash.getRemoteApps(RemoteAppsFromBootDash.java:25)
at org.springsource.ide.eclipse.commons.boot.ls.remoteapps.RemoteBootAppsDataHolder.union(RemoteBootAppsDataHolder.java:244)
at org.springsource.ide.eclipse.commons.boot.ls.remoteapps.RemoteBootAppsDataHolder.<init>(RemoteBootAppsDataHolder.java:235)
at org.springsource.ide.eclipse.commons.boot.ls.remoteapps.RemoteBootAppsDataHolder.getDefault(RemoteBootAppsDataHolder.java:53)
- locked <0x000000009ab00d80> (a java.lang.Class for org.springsource.ide.eclipse.commons.boot.ls.remoteapps.RemoteBootAppsDataHolder)
at org.springframework.tooling.boot.ls.DelegatingStreamConnectionProvider.getAllRemoteApps(DelegatingStreamConnectionProvider.java:239)
at org.springframework.tooling.boot.ls.DelegatingStreamConnectionProvider.sendConfiguration(DelegatingStreamConnectionProvider.java:192)
at org.springframework.tooling.boot.ls.DelegatingStreamConnectionProvider.handleMessage(DelegatingStreamConnectionProvider.java:129)
at org.eclipse.lsp4e.LanguageServerWrapper.lambda$4(LanguageServerWrapper.java:265)
at org.eclipse.lsp4e.LanguageServerWrapper$$Lambda$1168/0x0000000801da8920.consume(Unknown Source)
at org.eclipse.lsp4j.jsonrpc.json.StreamMessageProducer.handleMessage(StreamMessageProducer.java:194)
at org.eclipse.lsp4j.jsonrpc.json.StreamMessageProducer.listen(StreamMessageProducer.java:94)
at org.eclipse.lsp4j.jsonrpc.json.ConcurrentMessageProcessor.run(ConcurrentMessageProcessor.java:113)
at java.util.concurrent.Executors$RunnableAdapter.call(java.base@16.0.1/Executors.java:515)
at java.util.concurrent.FutureTask.run(java.base@16.0.1/FutureTask.java:264)
at java.util.concurrent.ThreadPoolExecutor.runWorker(java.base@16.0.1/ThreadPoolExecutor.java:1130)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(java.base@16.0.1/ThreadPoolExecutor.java:630)
at java.lang.Thread.run(java.base@16.0.1/Thread.java:831)