Bug 508685

Summary: Deadlock between DependencyGraph and StructureEdit
Product: [WebTools] WTP Common Tools Reporter: Carl Anderson <ccc>
Component: wst.commonAssignee: Carl Anderson <ccc>
Status: RESOLVED FIXED QA Contact: Carl Anderson <ccc>
Severity: normal    
Priority: P1 CC: bsd, cbridgha, thatnitind
Version: 3.7Flags: cbridgha: review+
Target Milestone: 3.8.2   
Hardware: PC   
OS: Windows 7   
See Also: https://bugs.eclipse.org/bugs/show_bug.cgi?id=511793
https://git.eclipse.org/c/webtools-common/webtools.common.git/commit/?id=fe19794887bce35a4930993919031c89d7409b93
Whiteboard:
Bug Depends on:    
Bug Blocks: 509889, 511793    
Attachments:
Description Flags
Acquire the lock for StructureEdit in ComponentManager
none
Better placement of the lock acquire none

Description Carl Anderson CLA 2016-12-05 12:22:03 EST
An adopter has hit a deadlock condition between DependencyGraph and StructureEdit.  Here are the relevant threads:


3XMTHREADINFO      "Worker-0" J9VMThread:0x0000000002ADCB00, j9thread_t:0x000000000F689F20, java/lang/Thread:0x00000000A1E8FC38, state:B, prio=5
3XMJAVALTHREAD            (java/lang/Thread getId:0x20, isDaemon:false)
3XMTHREADINFO1            (native thread ID:0xECC, native priority:0x5, native policy:UNKNOWN, vmstate:B, vm thread flags:0x00000201)
3XMCPUTIME               CPU usage total: 0.234001500 secs, user: 0.202801300 secs, system: 0.031200200 secs, current category="Application"
3XMTHREADBLOCK     Blocked on: org/eclipse/wst/common/componentcore/internal/util/ComponentImplManager@0x00000000A655C248 Owned by: "Worker-2" (J9VMThread:0x0000000003582400, java/lang/Thread:0x00000000A96CED38)
3XMHEAPALLOC             Heap bytes allocated since last GC cycle=0 (0x0)
3XMTHREADINFO3           Java callstack:
4XESTACKTRACE                at org/eclipse/wst/common/componentcore/internal/util/ComponentImplManager.createComponent(ComponentImplManager.java:203(Compiled Code))
4XESTACKTRACE                at org/eclipse/wst/common/componentcore/ComponentCore.createComponent(ComponentCore.java:64(Compiled Code))
4XESTACKTRACE                at org/eclipse/wst/common/componentcore/internal/util/HRefTranslator.convertStringToValue(HRefTranslator.java:69)
4XESTACKTRACE                at org/eclipse/wst/common/internal/emf/resource/EMF2DOMAdapterImpl.extractValue(EMF2DOMAdapterImpl.java:1213)
4XESTACKTRACE                at org/eclipse/wst/common/internal/emf/resource/EMF2DOMAdapterImpl.primUpdateMOFFeature(EMF2DOMAdapterImpl.java:1472(Compiled Code))
4XESTACKTRACE                at org/eclipse/wst/common/internal/emf/resource/EMF2DOMAdapterImpl.updateMOFFeature(EMF2DOMAdapterImpl.java:1851(Compiled Code))
4XESTACKTRACE                at org/eclipse/wst/common/internal/emf/resource/EMF2DOMAdapterImpl.primUpdateMOF(EMF2DOMAdapterImpl.java:993(Compiled Code))
4XESTACKTRACE                at org/eclipse/wst/common/internal/emf/resource/EMF2DOMAdapterImpl.updateMOF(EMF2DOMAdapterImpl.java:973(Compiled Code))
4XESTACKTRACE                at org/eclipse/wst/common/internal/emf/resource/EMF2DOMAdapterImpl.primUpdateMOFMultiFeature(EMF2DOMAdapterImpl.java:522)
4XESTACKTRACE                at org/eclipse/wst/common/internal/emf/resource/EMF2DOMAdapterImpl.primUpdateMOFMultiFeature(EMF2DOMAdapterImpl.java:1564(Compiled Code))
4XESTACKTRACE                at org/eclipse/wst/common/internal/emf/resource/EMF2DOMAdapterImpl.updateMOFMultiFeature(EMF2DOMAdapterImpl.java:1778(Compiled Code))
4XESTACKTRACE                at org/eclipse/wst/common/internal/emf/resource/EMF2DOMAdapterImpl.updateMOFFeature(EMF2DOMAdapterImpl.java:1833(Compiled Code))
4XESTACKTRACE                at org/eclipse/wst/common/internal/emf/resource/EMF2DOMAdapterImpl.primUpdateMOF(EMF2DOMAdapterImpl.java:993(Compiled Code))
4XESTACKTRACE                at org/eclipse/wst/common/internal/emf/resource/EMF2DOMAdapterImpl.updateMOF(EMF2DOMAdapterImpl.java:973(Compiled Code))
4XESTACKTRACE                at org/eclipse/wst/common/internal/emf/resource/EMF2DOMAdapterImpl.primUpdateMOFMultiFeature(EMF2DOMAdapterImpl.java:522)
4XESTACKTRACE                at org/eclipse/wst/common/internal/emf/resource/EMF2DOMAdapterImpl.primUpdateMOFMultiFeature(EMF2DOMAdapterImpl.java:1564(Compiled Code))
4XESTACKTRACE                at org/eclipse/wst/common/internal/emf/resource/EMF2DOMAdapterImpl.updateMOFMultiFeature(EMF2DOMAdapterImpl.java:1778(Compiled Code))
4XESTACKTRACE                at org/eclipse/wst/common/internal/emf/resource/EMF2DOMAdapterImpl.updateMOFFeature(EMF2DOMAdapterImpl.java:1833(Compiled Code))
4XESTACKTRACE                at org/eclipse/wst/common/internal/emf/resource/EMF2DOMAdapterImpl.primUpdateMOF(EMF2DOMAdapterImpl.java:993(Compiled Code))
4XESTACKTRACE                at org/eclipse/wst/common/internal/emf/resource/EMF2DOMAdapterImpl.updateMOF(EMF2DOMAdapterImpl.java:973(Compiled Code))
4XESTACKTRACE                at org/eclipse/wst/common/internal/emf/resource/EMF2DOMAdapterImpl.primUpdateMOFMultiFeature(EMF2DOMAdapterImpl.java:522)
4XESTACKTRACE                at org/eclipse/wst/common/internal/emf/resource/EMF2DOMAdapterImpl.updateMOFRootFeature(EMF2DOMAdapterImpl.java:1014)
4XESTACKTRACE                at org/eclipse/wst/common/internal/emf/resource/EMF2DOMAdapterImpl.primUpdateMOF(EMF2DOMAdapterImpl.java:989(Compiled Code))
4XESTACKTRACE                at org/eclipse/wst/common/internal/emf/resource/EMF2DOMAdapterImpl.updateMOF(EMF2DOMAdapterImpl.java:973(Compiled Code))
4XESTACKTRACE                at org/eclipse/wst/common/internal/emf/resource/EMF2DOMRenderer.doLoad(EMF2DOMRenderer.java:64)
4XESTACKTRACE                at org/eclipse/wst/common/internal/emf/resource/TranslatorResourceImpl.basicDoLoad(TranslatorResourceImpl.java:153)
4XESTACKTRACE                at org/eclipse/wst/common/internal/emf/resource/CompatibilityXMIResourceImpl.doLoad(CompatibilityXMIResourceImpl.java:182)
4XESTACKTRACE                at org/eclipse/emf/ecore/resource/impl/ResourceImpl.load(ResourceImpl.java:1518)
4XESTACKTRACE                at org/eclipse/emf/ecore/resource/impl/ResourceImpl.load(ResourceImpl.java:1297)
4XESTACKTRACE                at org/eclipse/wst/common/internal/emf/resource/CompatibilityXMIResourceImpl.load(CompatibilityXMIResourceImpl.java:272)
4XESTACKTRACE                at org/eclipse/wst/common/internal/emf/resource/TranslatorResourceImpl.load(TranslatorResourceImpl.java:423)
4XESTACKTRACE                at org/eclipse/emf/ecore/resource/impl/ResourceSetImpl.demandLoad(ResourceSetImpl.java:259)
4XESTACKTRACE                at org/eclipse/jem/internal/util/emf/workbench/ProjectResourceSetImpl.demandLoad(ProjectResourceSetImpl.java:811)
4XESTACKTRACE                at org/eclipse/emf/ecore/resource/impl/ResourceSetImpl.demandLoadHelper(ResourceSetImpl.java:274)
4XESTACKTRACE                at org/eclipse/jem/internal/util/emf/workbench/ProjectResourceSetImpl.getResource(ProjectResourceSetImpl.java:1064(Compiled Code))
4XESTACKTRACE                at org/eclipse/wst/common/internal/emfworkbench/WorkbenchResourceHelper.getOrCreateResource(WorkbenchResourceHelper.java:380(Compiled Code))
4XESTACKTRACE                at org/eclipse/wst/common/internal/emfworkbench/integration/EditModel.getResource(EditModel.java:685(Compiled Code))
4XESTACKTRACE                at org/eclipse/wst/common/componentcore/internal/ModuleStructuralModel.getPrimaryResource(ModuleStructuralModel.java:332(Compiled Code))
4XESTACKTRACE                at org/eclipse/wst/common/componentcore/internal/ModuleStructuralModel.prepareProjectModulesIfNecessary(ModuleStructuralModel.java:240(Compiled Code))
4XESTACKTRACE                at org/eclipse/wst/common/componentcore/internal/ModuleStructuralModel.getPrimaryRootObject(ModuleStructuralModel.java:119(Compiled Code))
4XESTACKTRACE                at org/eclipse/wst/common/componentcore/internal/StructureEdit.getComponentModelRoot(StructureEdit.java:471(Compiled Code))
5XESTACKTRACE                   (entered lock: org/eclipse/wst/common/componentcore/internal/ModuleStructuralModel@0x00000000A55ADDC8, entry count: 1)
4XESTACKTRACE                at org/eclipse/wst/common/componentcore/internal/StructureEdit.getWorkbenchModules(StructureEdit.java:506(Compiled Code))
4XESTACKTRACE                at org/eclipse/wst/common/componentcore/internal/StructureEdit.getComponent(StructureEdit.java:949(Compiled Code))


3XMTHREADINFO      "Worker-2" J9VMThread:0x0000000003582400, j9thread_t:0x000000000F692930, java/lang/Thread:0x00000000A96CED38, state:CW, prio=5
3XMJAVALTHREAD            (java/lang/Thread getId:0x31, isDaemon:false)
3XMTHREADINFO1            (native thread ID:0xF0C, native priority:0x5, native policy:UNKNOWN, vmstate:CW, vm thread flags:0x00080101)
3XMCPUTIME               CPU usage total: 0.483603100 secs, user: 0.343202200 secs, system: 0.140400900 secs, current category="Application"
3XMTHREADBLOCK     Waiting on: org/eclipse/core/internal/jobs/Semaphore@0x00000000A55ADFF0 Owned by: <unowned>
3XMHEAPALLOC             Heap bytes allocated since last GC cycle=0 (0x0)
3XMTHREADINFO3           Java callstack:
4XESTACKTRACE                at java/lang/Object.wait(Native Method)
4XESTACKTRACE                at java/lang/Object.wait(Object.java:201(Compiled Code))
4XESTACKTRACE                at org/eclipse/core/internal/jobs/Semaphore.acquire(Semaphore.java:39(Compiled Code))
5XESTACKTRACE                   (entered lock: org/eclipse/core/internal/jobs/Semaphore@0x00000000A55ADFF0, entry count: 1)
4XESTACKTRACE                at org/eclipse/core/internal/jobs/OrderedLock.doAcquire(OrderedLock.java:170)
4XESTACKTRACE                at org/eclipse/core/internal/jobs/OrderedLock.acquire(OrderedLock.java:106(Compiled Code))
4XESTACKTRACE                at org/eclipse/core/internal/jobs/OrderedLock.acquire(OrderedLock.java:82(Compiled Code))
4XESTACKTRACE                at org/eclipse/wst/common/componentcore/internal/StructureEdit.getComponentModelRoot(StructureEdit.java:467(Compiled Code))
4XESTACKTRACE                at org/eclipse/wst/common/componentcore/internal/StructureEdit.getWorkbenchModules(StructureEdit.java:506(Compiled Code))
4XESTACKTRACE                at org/eclipse/wst/common/componentcore/internal/StructureEdit.getComponent(StructureEdit.java:949(Compiled Code))
4XESTACKTRACE                at org/eclipse/wst/common/componentcore/internal/resources/VirtualComponent.createResource(VirtualComponent.java:124)
4XESTACKTRACE                at org/eclipse/wst/common/componentcore/internal/resources/VirtualComponent.initializeResource(VirtualComponent.java:113)
4XESTACKTRACE                at org/eclipse/wst/common/componentcore/internal/resources/VirtualComponent.<init>(VirtualComponent.java:148)
4XESTACKTRACE                at org/eclipse/jst/j2ee/componentcore/util/EARVirtualComponent.<init>(EARVirtualComponent.java:68)
4XESTACKTRACE                at org/eclipse/jst/j2ee/componentcore/util/EARVirtualComponent.createComponent(EARVirtualComponent.java:76)
4XESTACKTRACE                at org/eclipse/wst/common/componentcore/internal/util/ComponentImplManager.createComponent(ComponentImplManager.java:215)
5XESTACKTRACE                   (entered lock: org/eclipse/wst/common/componentcore/internal/util/ComponentImplManager@0x00000000A655C248, entry count: 1)
4XESTACKTRACE                at org/eclipse/wst/common/componentcore/internal/util/ComponentImplManager.createComponent(ComponentImplManager.java:203(Compiled Code))
4XESTACKTRACE                at org/eclipse/wst/common/componentcore/ComponentCore.createComponent(ComponentCore.java:64(Compiled Code))
4XESTACKTRACE                at org/eclipse/wst/common/componentcore/internal/builder/DependencyGraphImpl$2$1.isStale(DependencyGraphImpl.java:959)
4XESTACKTRACE                at org/eclipse/wst/common/componentcore/internal/builder/DependencyGraphImpl$2$1.run(DependencyGraphImpl.java:939)
4XESTACKTRACE                at org/eclipse/core/runtime/SafeRunner.run(SafeRunner.java:42(Compiled Code))
4XESTACKTRACE                at org/eclipse/wst/common/componentcore/internal/builder/DependencyGraphImpl$2.run(DependencyGraphImpl.java:929)
4XESTACKTRACE                at org/eclipse/core/internal/jobs/Worker.run(Worker.java:55(Compiled Code))
Comment 1 Carl Anderson CLA 2016-12-05 14:01:13 EST
Created attachment 265726 [details]
Acquire the lock for StructureEdit in ComponentManager
Comment 2 Carl Anderson CLA 2016-12-14 08:13:47 EST
Created attachment 265873 [details]
Better placement of the lock acquire
Comment 3 Carl Anderson CLA 2017-01-03 17:03:50 EST
committed to master for WTP 3.8.2 (Neon.3) and WTP 3.9.0 (Oxygen)