Bug 578243 - Deadlock between ApiBaseline.resolvePackage() and BundleComponent.getHost()
Summary: Deadlock between ApiBaseline.resolvePackage() and BundleComponent.getHost()
Status: RESOLVED FIXED
Alias: None
Product: PDE
Classification: Eclipse Project
Component: API Tools (show other bugs)
Version: 4.22   Edit
Hardware: PC All
: P3 normal (vote)
Target Milestone: 4.23 M2   Edit
Assignee: Andrey Loskutov CLA
QA Contact:
URL:
Whiteboard:
Keywords:
Depends on:
Blocks: 576736
  Show dependency tree
 
Reported: 2022-01-17 07:53 EST by Andrey Loskutov CLA
Modified: 2022-01-19 05:42 EST (History)
1 user (show)

See Also:


Attachments
Full thread dump (51.82 KB, text/x-log)
2022-01-17 07:53 EST, Andrey Loskutov CLA
no flags Details

Note You need to log in before you can comment on or make changes to this bug.
Description Andrey Loskutov CLA 2022-01-17 07:53:39 EST
Created attachment 287843 [details]
Full thread dump

Got this nice deadlock report trying to rebase a branch in JDT core:

Found one Java-level deadlock:
=============================
"Worker-832: Rebasing Branch change/171776/1 on refs/remotes/origin/master":
  waiting to lock monitor 0x00007ffe60001d80 (object 0x000000045ec9c9c0, a org.eclipse.pde.api.tools.internal.model.WorkspaceBaseline),
  which is held by "Worker-1065: Performing API Analysis"
"Worker-1065: Performing API Analysis":
  waiting to lock monitor 0x00007ffd74024380 (object 0x00000004623e6be0, a org.eclipse.pde.api.tools.internal.model.ProjectComponent),
  which is held by "Worker-1063: Performing API Analysis"
"Worker-1063: Performing API Analysis":
  waiting to lock monitor 0x00007ffe60001d80 (object 0x000000045ec9c9c0, a org.eclipse.pde.api.tools.internal.model.WorkspaceBaseline),
  which is held by "Worker-1065: Performing API Analysis"

Java stack information for the threads listed above:
===================================================
"Worker-832: Rebasing Branch change/171776/1 on refs/remotes/origin/master":
	at org.eclipse.pde.api.tools.internal.model.ApiBaseline.loadBaselineInfos(ApiBaseline.java:744)
	- waiting to lock <0x000000045ec9c9c0> (a org.eclipse.pde.api.tools.internal.model.WorkspaceBaseline)
	at org.eclipse.pde.api.tools.internal.model.ApiBaseline.getApiComponents(ApiBaseline.java:547)
	at org.eclipse.pde.api.tools.internal.model.ApiBaseline.doDispose(ApiBaseline.java:817)
	at org.eclipse.pde.api.tools.internal.model.WorkspaceBaseline.dispose(WorkspaceBaseline.java:48)
	at org.eclipse.pde.api.tools.internal.ApiBaselineManager.disposeWorkspaceBaseline(ApiBaselineManager.java:622)
	- locked <0x00000004180c4160> (a org.eclipse.pde.api.tools.internal.ApiBaselineManager)
	at org.eclipse.pde.api.tools.internal.WorkspaceDeltaProcessor.processJavaElementDeltas(WorkspaceDeltaProcessor.java:80)
	at org.eclipse.pde.api.tools.internal.WorkspaceDeltaProcessor.elementChanged(WorkspaceDeltaProcessor.java:49)
	at org.eclipse.jdt.internal.core.DeltaProcessor$3.run(DeltaProcessor.java:1755)
	at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45)
	at org.eclipse.jdt.internal.core.DeltaProcessor.notifyListeners(DeltaProcessor.java:1743)
	at org.eclipse.jdt.internal.core.DeltaProcessor.firePostChangeDelta(DeltaProcessor.java:1576)
	at org.eclipse.jdt.internal.core.DeltaProcessor.fire(DeltaProcessor.java:1552)
	at org.eclipse.jdt.internal.core.DeltaProcessor.notifyAndFire(DeltaProcessor.java:2273)
	at org.eclipse.jdt.internal.core.DeltaProcessor.resourceChanged(DeltaProcessor.java:2163)
	at org.eclipse.jdt.internal.core.DeltaProcessingState.resourceChanged(DeltaProcessingState.java:501)
	at org.eclipse.core.internal.events.NotificationManager$1.run(NotificationManager.java:305)
	at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45)
	at org.eclipse.core.internal.events.NotificationManager.notify(NotificationManager.java:295)
	at org.eclipse.core.internal.events.NotificationManager.broadcastChanges(NotificationManager.java:158)
	at org.eclipse.core.internal.resources.Workspace.broadcastPostChange(Workspace.java:381)
	at org.eclipse.core.internal.resources.Workspace.endOperation(Workspace.java:1503)
	at org.eclipse.core.internal.resources.InternalWorkspaceJob.run(InternalWorkspaceJob.java:49)
	at org.eclipse.core.internal.jobs.Worker.run(Worker.java:63)
"Worker-1065: Performing API Analysis":
	at org.eclipse.pde.api.tools.internal.model.Component.getApiTypeContainers(Component.java:125)
	- waiting to lock <0x00000004623e6be0> (a org.eclipse.pde.api.tools.internal.model.ProjectComponent)
	at org.eclipse.pde.api.tools.internal.model.AbstractApiTypeContainer.getPackageNames(AbstractApiTypeContainer.java:157)
	at org.eclipse.pde.api.tools.internal.model.ApiBaseline.resolvePackage0(ApiBaseline.java:648)
	at org.eclipse.pde.api.tools.internal.model.ApiBaseline.resolvePackage(ApiBaseline.java:578)
	- locked <0x000000045ec9c9c0> (a org.eclipse.pde.api.tools.internal.model.WorkspaceBaseline)
	at org.eclipse.pde.api.tools.internal.builder.Reference.getParameterList(Reference.java:331)
	at org.eclipse.pde.api.tools.internal.builder.LeakReturnTypeDetector.isProblem(LeakReturnTypeDetector.java:65)
	at org.eclipse.pde.api.tools.internal.builder.AbstractProblemDetector.createProblems(AbstractProblemDetector.java:515)
	at org.eclipse.pde.api.tools.internal.builder.ReferenceAnalyzer.analyze(ReferenceAnalyzer.java:248)
	at org.eclipse.pde.api.tools.internal.builder.BaseApiAnalyzer.checkApiUsage(BaseApiAnalyzer.java:1286)
	at org.eclipse.pde.api.tools.internal.builder.BaseApiAnalyzer.analyzeComponent(BaseApiAnalyzer.java:289)
	at org.eclipse.pde.api.tools.internal.builder.ApiAnalysisBuilder.buildAll(ApiAnalysisBuilder.java:923)
	at org.eclipse.pde.api.tools.internal.builder.ApiAnalysisBuilder.work(ApiAnalysisBuilder.java:427)
	at org.eclipse.pde.api.tools.internal.builder.ApiAnalysisBuilder$ApiAnalysisJob.run(ApiAnalysisBuilder.java:579)
	at org.eclipse.core.internal.jobs.Worker.run(Worker.java:63)
"Worker-1063: Performing API Analysis":
	at org.eclipse.pde.api.tools.internal.model.ApiBaseline.loadBaselineInfos(ApiBaseline.java:744)
	- waiting to lock <0x000000045ec9c9c0> (a org.eclipse.pde.api.tools.internal.model.WorkspaceBaseline)
	at org.eclipse.pde.api.tools.internal.model.ApiBaseline.getApiComponent(ApiBaseline.java:715)
	at org.eclipse.pde.api.tools.internal.model.BundleComponent.getHost(BundleComponent.java:1108)
	- locked <0x00000004623e6be0> (a org.eclipse.pde.api.tools.internal.model.ProjectComponent)
	at org.eclipse.pde.api.tools.internal.model.AbstractApiTypeContainer.findTypeRoot(AbstractApiTypeContainer.java:130)
	at org.eclipse.pde.api.tools.internal.provisional.comparator.ApiComparator$2.visit(ApiComparator.java:680)
	at org.eclipse.pde.api.tools.internal.model.ArchiveApiTypeContainer.accept(ArchiveApiTypeContainer.java:198)
	at org.eclipse.pde.api.tools.internal.provisional.comparator.ApiComparator.internalCompare(ApiComparator.java:659)
	at org.eclipse.pde.api.tools.internal.provisional.comparator.ApiComparator.compare(ApiComparator.java:289)
	at org.eclipse.pde.api.tools.internal.provisional.comparator.ApiComparator.compare(ApiComparator.java:315)
	at org.eclipse.pde.api.tools.internal.builder.BaseApiAnalyzer.checkCompatibility(BaseApiAnalyzer.java:1504)
	at org.eclipse.pde.api.tools.internal.builder.BaseApiAnalyzer.analyzeComponent(BaseApiAnalyzer.java:269)
	at org.eclipse.pde.api.tools.internal.builder.ApiAnalysisBuilder.buildAll(ApiAnalysisBuilder.java:923)
	at org.eclipse.pde.api.tools.internal.builder.ApiAnalysisBuilder.work(ApiAnalysisBuilder.java:427)
	at org.eclipse.pde.api.tools.internal.builder.ApiAnalysisBuilder$ApiAnalysisJob.run(ApiAnalysisBuilder.java:579)
	at org.eclipse.core.internal.jobs.Worker.run(Worker.java:63)

Found 1 deadlock.
Comment 1 Eclipse Genie CLA 2022-01-17 12:41:19 EST
New Gerrit change created: https://git.eclipse.org/r/c/pde/eclipse.pde.ui/+/189712
Comment 3 Andrey Loskutov CLA 2022-01-18 05:59:07 EST
Seem to work with 4.23.0.I20220117-1800 build without deadlock.
Comment 4 Eclipse Genie CLA 2022-01-19 03:27:33 EST
New Gerrit change created: https://git.eclipse.org/r/c/pde/eclipse.pde.ui/+/189764
Comment 5 Alexander Kurtakov CLA 2022-01-19 03:54:10 EST
API descriptions are built using latest I-build and I think this one caused latest comparator errors in https://download.eclipse.org/eclipse/downloads/drops4/I20220118-1800/ . Please investigate.
Comment 7 Alexander Kurtakov CLA 2022-01-19 04:10:00 EST
Local compile failed with:
[/usr/lib/jvm/java-17-openjdk-17.0.1.0.12-13.rolling.fc35.x86_64/bin/java, -Xmx2048M, -Dp2.RepositoryPreferences.retryOnSocketTimeout=true, -Dp2.RepositoryPreferences.connectionRetryCount=3, -Dp2.RepositoryPreferences.connectionMsRetryDelay=500, -Dorg.eclipse.ecf.provider.filetransfer.retrieve.readTimeout=10000, -jar, /home/akurtakov/.m2/repository/p2/osgi/bundle/org.eclipse.equinox.launcher/1.6.400.v20210924-0641/org.eclipse.equinox.launcher-1.6.400.v20210924-0641.jar, -install, /home/akurtakov/git/eclipse.platform.ua/org.eclipse.ui.intro/apiAnalyzer-workspace, -configuration, /home/akurtakov/git/eclipse.platform.ua/org.eclipse.ui.intro/apiAnalyzer-workspace/configuration, -data, /home/akurtakov/git/eclipse.platform.ua/org.eclipse.ui.intro/apiAnalyzer-workspace/data, -application, org.eclipse.pde.api.tools.apiAnalyzer, -project, /home/akurtakov/git/eclipse.platform.ua/org.eclipse.ui.intro, -baseline, /home/akurtakov/git/eclipse.platform.ua/org.eclipse.ui.intro/target/org.eclipse.ui.intro-apiBaseline.target, -dependencyList, /home/akurtakov/git/eclipse.platform.ua/org.eclipse.ui.intro/target/dependencies-list.txt, -failOnError]
Status ERROR: org.eclipse.core.resources code=77 Invalid project description. children=[Status OK: unknown code=0 OK [type: ERROR], [path: null], [message: /home/akurtakov/git/eclipse.platform.ua/org.eclipse.ui.intro overlaps the workspace location: /home/akurtakov/git/eclipse.platform.ua/org.eclipse.ui.intro/apiAnalyzer-workspace/data], [plugin: org.eclipse.core.resources], [exception: null]
Comment 8 Andrey Loskutov CLA 2022-01-19 04:12:02 EST
(In reply to Alexander Kurtakov from comment #7)
> Local compile failed with:
Alex, please use bug 578273 for further investigation.
Comment 9 Andrey Loskutov CLA 2022-01-19 05:42:01 EST
The patch caused comparator errors in I20220118-1800 is merged via bug 578273, the code change (see https://git.eclipse.org/r/c/pde/eclipse.pde.ui/+/189773/2/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/model/CompositeApiTypeContainer.java) was a side effect of refactoring and only indirectly related to the deadlock solution.