[jbosstools-issues] [JBoss JIRA] (ERT-499) Deadlock DependencyGraphImpl and ComponentCore [EBZ#511793]
Friendly Jira Robot (JIRA)
issues at jboss.org
Thu Apr 6 10:30:00 EDT 2017
Friendly Jira Robot created ERT-499:
---------------------------------------
Summary: Deadlock DependencyGraphImpl and ComponentCore [EBZ#511793]
Key: ERT-499
URL: https://issues.jboss.org/browse/ERT-499
Project: Eclipse Release Train
Issue Type: Task
Components: WTP Common Tools
Reporter: Friendly Jira Robot
We have some code that creates a project and then installs a custom facet. We're seeing a deadlock with the DependencyGraphImpl's GraphUpdateJob.
Our code creates the project and then uses FacetedProject#modify() to install our own facet in the project. It hangs attempting to acquire the project's lock. But it has already acquired the ComponentImplManager's synchronization lock (stack frame marked with XXX):
Thread [ModalContext] (Suspended (entry into method getProjectLockObject in EMFWorkbenchEditContextFactory))
owns: ComponentImplManager (id=218)
owns: CreateAppEngineStandardWtpProject (id=219)
EMFWorkbenchEditContextFactory.getProjectLockObject(IProject) line: 63
EMFWorkbenchEditContextFactory.createEMFContext(IProject, IEMFContextContributor) line: 79
WorkbenchResourceHelperBase.createEMFContext(IProject, IEMFContextContributor) line: 249
ModuleCoreNature(EMFNature).createEmfContext() line: 105
ModuleCoreNature(EMFNature).getEmfContextBase() line: 229
ModuleCoreNature(EditModelNature).getEmfContext() line: 61
ModuleCoreNature.getModuleStructuralModelForWrite(Object) line: 303
StructureEdit.<init>(ModuleCoreNature, boolean) line: 329
StructureEdit.getStructureEditForRead(IProject) line: 119
VirtualComponent.createResource() line: 121
VirtualComponent.initializeResource() line: 113
VirtualComponent.<init>(IProject, IPath) line: 148
XXX ComponentImplManager.createComponent(IProject, boolean) line: 250
ComponentCore.createComponent(IProject, boolean) line: 84
WebFacetInstallDelegate.setContentPropertyIfNeeded(IDataModel, IPath, IProject) line: 221
WebFacetInstallDelegate.execute(IProject, IProjectFacetVersion, Object, IProgressMonitor) line: 86
FacetedProject.callDelegate(IProjectFacetVersion, IDelegate, Object, Object, IProgressMonitor) line: 1477
FacetedProject.modifyInternal(Set<Action>, IProgressMonitor) line: 441
FacetedProject.mergeChangesInternal(IFacetedProjectWorkingCopy, IProgressMonitor) line: 1181
FacetedProject.access$2(FacetedProject, IFacetedProjectWorkingCopy, IProgressMonitor) line: 1117
FacetedProject$1.run(IProgressMonitor) line: 324
Workspace.run(ICoreRunnable, ISchedulingRule, int, IProgressMonitor) line: 2240
Workspace.run(IWorkspaceRunnable, ISchedulingRule, int, IProgressMonitor) line: 2267
FacetedProject.modify(Set<Action>, IProgressMonitor) line: 339
AppEngineStandardFacet.installAppEngineFacet(IFacetedProject, boolean, IProgressMonitor) line: 150
CreateAppEngineStandardWtpProject.execute(IProgressMonitor) line: 103
CreateAppEngineStandardWtpProject(WorkspaceModifyOperation).lambda$0(InvocationTargetException[], IProgressMonitor) line: 107
1612372028.run(IProgressMonitor) line: not available
Workspace.run(ICoreRunnable, ISchedulingRule, int, IProgressMonitor) line: 2240
Workspace.run(IWorkspaceRunnable, ISchedulingRule, int, IProgressMonitor) line: 2267
CreateAppEngineStandardWtpProject(WorkspaceModifyOperation).run(IProgressMonitor) line: 128
ModalContext$ModalContextThread.run() line: 119
The project creation spawns a GraphUpdateJob that call ComponentImplManager#createComponent(IProject). This method first acquires the associated project lock, and then attempts to call ComponentImplManager#createComponent(IProject,boolean), which is a synchronized method.
Thread [Worker-0] (Suspended (entry into method getProjectLockObject in EMFWorkbenchEditContextFactory))
EMFWorkbenchEditContextFactory.getProjectLockObject(IProject) line: 63
ComponentImplManager.createComponent(IProject) line: 207
ComponentCore.createComponent(IProject) line: 64
DependencyGraphImpl$GraphUpdateJob$1.run() line: 494
SafeRunner.run(ISafeRunnable) line: 42
DependencyGraphImpl$GraphUpdateJob.run(IProgressMonitor) line: 462
Worker.run() line: 56
If the GraphUpdateJob acquires the project lock first, we have deadlock as our ModalContext thread has the ComponentImplManager's synchronization lock.
--
This message was sent by Atlassian JIRA
(v7.2.3#72005)
More information about the jbosstools-issues
mailing list