Some Eclipse Foundation services are deprecated, or will be soon. Please ensure you've read this important communication.
Bug 366983 - Deadlock when changing the target runtime of EAR project and its modules during autobuild
Summary: Deadlock when changing the target runtime of EAR project and its modules duri...
Status: RESOLVED FIXED
Alias: None
Product: WTP Java EE Tools
Classification: WebTools
Component: jst.j2ee (show other bugs)
Version: 3.3.1   Edit
Hardware: PC Windows XP
: P3 major (vote)
Target Milestone: 3.3.2   Edit
Assignee: Roberto Sanchez Herrera CLA
QA Contact: Chuck Bridgham CLA
URL:
Whiteboard:
Keywords:
Depends on: 362238
Blocks: 362308
  Show dependency tree
 
Reported: 2011-12-16 16:06 EST by Roberto Sanchez Herrera CLA
Modified: 2011-12-19 17:22 EST (History)
1 user (show)

See Also:
cbridgha: review+


Attachments
Proposed patch for R3_3_maintenance and HEAD (1.92 KB, patch)
2011-12-16 16:17 EST, Roberto Sanchez Herrera CLA
no flags Details | Diff

Note You need to log in before you can comment on or make changes to this bug.
Description Roberto Sanchez Herrera CLA 2011-12-16 16:06:22 EST
Clone to fix this in WTP 3.3.2 and 3.4.

+++ This bug was initially created as a clone of Bug #362238 +++

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-12-16 16:17:06 EST
Created attachment 208509 [details]
Proposed patch for R3_3_maintenance and HEAD

The patch can be applied in both R3_3_maintenance and HEAD
Comment 2 Chuck Bridgham CLA 2011-12-19 10:23:28 EST
approved - same fix as other streams - only checks references defined in .component file  (project refs)
Comment 3 Roberto Sanchez Herrera CLA 2011-12-19 17:22:09 EST
Code committed to R3_3_maintenance and HEAD for WTP 3.3.2 and 3.4