Some Eclipse Foundation services are deprecated, or will be soon. Please ensure you've read this important communication.

Bug 362238

Summary: Deadlock when changing the target runtime of EAR project and its modules during autobuild
Product: [WebTools] WTP Java EE Tools Reporter: Roberto Sanchez Herrera <shr31223>
Component: jst.j2eeAssignee: Roberto Sanchez Herrera <shr31223>
Status: RESOLVED FIXED QA Contact: Chuck Bridgham <cbridgha>
Severity: major    
Priority: P3 CC: ccc
Version: 3.2.5Flags: cbridgha: review+
Target Milestone: 3.2.5 P   
Hardware: PC   
OS: Windows XP   
Whiteboard:
Bug Depends on:    
Bug Blocks: 362308, 366983    
Attachments:
Description Flags
Proposed patch none

Description Roberto Sanchez Herrera CLA 2011-10-27 15:55:01 EDT
An adopter found a deadlock during the autobuild after the projects were imported from a repository. These are the partial stack traces:

3XMTHREADINFO      "Worker-28" J9VMThread:0x5D37B200, j9thread_t:0x4EBDE03C, java/lang/Thread:0x0AB48490, state:CW, prio=5
3XMTHREADINFO1            (native thread ID:0xEB8, native priority:0x5, native policy:UNKNOWN)
3XMTHREADINFO3           Java callstack:
4XESTACKTRACE                at java/lang/Object.wait(Native Method)
4XESTACKTRACE                at java/lang/Object.wait(Object.java:167(Compiled Code))
4XESTACKTRACE                at org/eclipse/wst/common/project/facet/core/internal/FacetedProject.beginModification(FacetedProject.java:1385)
4XESTACKTRACE                at org/eclipse/wst/common/project/facet/core/internal/FacetedProject.access$0(FacetedProject.java:1366)
4XESTACKTRACE                at org/eclipse/wst/common/project/facet/core/internal/FacetedProject$5.run(FacetedProject.java:1096)
4XESTACKTRACE                at org/eclipse/core/internal/resources/Workspace.run(Workspace.java:1975(Compiled Code))
4XESTACKTRACE                at org/eclipse/wst/common/project/facet/core/internal/FacetedProject.mergeChanges(FacetedProject.java:1110)
4XESTACKTRACE                at org/eclipse/wst/common/project/facet/core/internal/FacetedProjectWorkingCopy.commitChanges(FacetedProjectWorkingCopy.java:2020)
............


3XMTHREADINFO      "Worker-25" J9VMThread:0x5D2C2800, j9thread_t:0x4EBFBD18, java/lang/Thread:0x09EB6750, state:CW, prio=5
3XMTHREADINFO1            (native thread ID:0x8BC, native priority:0x5, native policy:UNKNOWN)
3XMTHREADINFO3           Java callstack:
4XESTACKTRACE                at java/lang/Object.wait(Native Method)
4XESTACKTRACE                at java/lang/Object.wait(Object.java:196(Compiled Code))
4XESTACKTRACE                at org/eclipse/core/internal/jobs/ThreadJob.waitForRun(ThreadJob.java:269(Compiled Code))
4XESTACKTRACE                at org/eclipse/core/internal/jobs/ThreadJob.joinRun(ThreadJob.java:199)
4XESTACKTRACE                at org/eclipse/core/internal/jobs/JobManager.yieldRule(JobManager.java:1398)
4XESTACKTRACE                at org/eclipse/core/internal/jobs/InternalJob.yieldRule(InternalJob.java:600(Compiled Code))
4XESTACKTRACE                at org/eclipse/core/runtime/jobs/Job.yieldRule(Job.java:709(Compiled Code))
4XESTACKTRACE                at org/eclipse/wst/common/componentcore/internal/builder/DependencyGraphImpl.waitForAllUpdates(DependencyGraphImpl.java:671(Compiled Code))
4XESTACKTRACE                at org/eclipse/wst/common/componentcore/internal/builder/DependencyGraphImpl.getReferencingComponents(DependencyGraphImpl.java:126(Compiled Code))
4XESTACKTRACE                at org/eclipse/wst/common/componentcore/internal/builder/DependencyGraphImpl.getReferencingComponents(DependencyGraphImpl.java:116(Compiled Code))
4XESTACKTRACE                at org/eclipse/wst/common/componentcore/internal/resources/VirtualComponent.getReferencingComponents(VirtualComponent.java:577(Compiled Code))
4XESTACKTRACE                at org/eclipse/jst/j2ee/project/EarUtilities.getReferencingEARProjects(EarUtilities.java:274(Compiled Code))
4XESTACKTRACE                at org/eclipse/jst/j2ee/componentcore/J2EEModuleVirtualComponent.calculateManifestReferences(J2EEModuleVirtualComponent.java:364(Compiled Code))
4XESTACKTRACE                at org/eclipse/jst/j2ee/componentcore/J2EEModuleVirtualComponent.cacheManifestReferences(J2EEModuleVirtualComponent.java:354)
4XESTACKTRACE                at org/eclipse/jst/j2ee/componentcore/J2EEModuleVirtualComponent.getReferences(J2EEModuleVirtualComponent.java:170)
4XESTACKTRACE                at org/eclipse/jst/j2ee/componentcore/J2EEModuleVirtualComponent.getReferences(J2EEModuleVirtualComponent.java:208)
4XESTACKTRACE                at org/eclipse/jst/j2ee/componentcore/J2EEModuleVirtualComponent.getReferences(J2EEModuleVirtualComponent.java:201)
4XESTACKTRACE                at org/eclipse/jst/j2ee/project/facet/J2EEFacetRuntimeChangedDelegate.execute(J2EEFacetRuntimeChangedDelegate.java:95)
4XESTACKTRACE                at org/eclipse/wst/common/project/facet/core/events/internal/LegacyEventHandlerAdapter.handleEvent(LegacyEventHandlerAdapter.java:100)
4XESTACKTRACE                at org/eclipse/wst/common/project/facet/core/events/internal/ProjectListenerRegistry.notifyListeners(ProjectListenerRegistry.java:76)
4XESTACKTRACE                at org/eclipse/wst/common/project/facet/core/internal/FacetedProject.notifyListeners(FacetedProject.java:1328)
4XESTACKTRACE                at org/eclipse/wst/common/project/facet/core/internal/FacetedProject.setTargetedRuntimesInternal(FacetedProject.java:751)
4XESTACKTRACE                at org/eclipse/wst/common/project/facet/core/internal/FacetedProject.access$4(FacetedProject.java:664)
4XESTACKTRACE                at org/eclipse/wst/common/project/facet/core/internal/FacetedProject$3.run(FacetedProject.java:646)
4XESTACKTRACE                at org/eclipse/core/internal/resources/Workspace.run(Workspace.java:1975(Compiled Code))
4XESTACKTRACE                at org/eclipse/wst/common/project/facet/core/internal/FacetedProject.setTargetedRuntimes(FacetedProject.java:656)
4XESTACKTRACE                at org/eclipse/wst/common/project/facet/core/internal/FacetedProject.setRuntime(FacetedProject.java:583)
4XESTACKTRACE                at org/eclipse/jst/j2ee/project/facet/J2EEFacetRuntimeChangedDelegate.updateProjectRuntime(J2EEFacetRuntimeChangedDelegate.java:266)
4XESTACKTRACE                at org/eclipse/jst/j2ee/project/facet/J2EEFacetRuntimeChangedDelegate.updateProjectRuntime(J2EEFacetRuntimeChangedDelegate.java:286)
4XESTACKTRACE                at org/eclipse/jst/j2ee/project/facet/EarFacetRuntimeHandler.updateModuleProjectRuntime(EarFacetRuntimeHandler.java:58)
4XESTACKTRACE                at org/eclipse/jst/j2ee/application/internal/operations/AddComponentToEnterpriseApplicationOp.updateModuleRuntimes(AddComponentToEnterpriseApplicationOp.java:336)
4XESTACKTRACE                at org/eclipse/jst/j2ee/application/internal/operations/AddComponentToEnterpriseApplicationOp.execute(AddComponentToEnterpriseApplicationOp.java:85)
4XESTACKTRACE                at org/eclipse/wst/common/frameworks/internal/datamodel/DataModelPausibleOperationImpl$1.run(DataModelPausibleOperationImpl.java:385)
4XESTACKTRACE                at org/eclipse/core/internal/resources/Workspace.run(Workspace.java:1975(Compiled Code))
4XESTACKTRACE                at org/eclipse/wst/common/frameworks/internal/datamodel/DataModelPausibleOperationImpl.runOperation(DataModelPausibleOperationImpl.java:410)
4XESTACKTRACE                at org/eclipse/wst/common/frameworks/internal/datamodel/DataModelPausibleOperationImpl.runOperation(DataModelPausibleOperationImpl.java:360)
4XESTACKTRACE                at org/eclipse/wst/common/frameworks/internal/datamodel/DataModelPausibleOperationImpl.doExecute(DataModelPausibleOperationImpl.java:247)
4XESTACKTRACE                at org/eclipse/wst/common/frameworks/internal/datamodel/DataModelPausibleOperationImpl.executeImpl(DataModelPausibleOperationImpl.java:219)
4XESTACKTRACE                at org/eclipse/wst/common/frameworks/internal/datamodel/DataModelPausibleOperationImpl.cacheThreadAndContinue(DataModelPausibleOperationImpl.java:89)
4XESTACKTRACE                at org/eclipse/wst/common/frameworks/internal/datamodel/DataModelPausibleOperationImpl.execute(DataModelPausibleOperationImpl.java:207)


The problem is that worker-25 (autobuild job) initiates a modification in the faceted project, and later it tries to get the referencing EAR projects, which in turn calls the DependencyGraphImpl, which waits for all the updates, which calls to yieldRule, but does not releases the internal lock on the faceted project.

Meanwhile, Worker-28, which is a Faceted Project Listener, tries to commit the changes to the faceted project, but because worker-25 already has the internal lock, it will wait until worker-25 finishes.
Comment 1 Roberto Sanchez Herrera CLA 2011-10-27 17:10:38 EDT
Created attachment 206097 [details]
Proposed patch
Comment 2 Chuck Bridgham CLA 2011-11-28 10:36:22 EST
approved - changing to read only .component entries
Comment 3 Roberto Sanchez Herrera CLA 2011-12-16 16:03:27 EST
Code committed to R3_2_5_patches for WTP 3.2.5p