Skip to content

Deadlock with Spring LSP in Eclipse 4.23 with STS 4.23 nighlies #729

Closed
@gayanper

Description

@gayanper

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)

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

Relationships

None yet

Development

No branches or pull requests

Issue actions