Bug 508685 - Deadlock between DependencyGraph and StructureEdit
Summary: Deadlock between DependencyGraph and StructureEdit
Status: RESOLVED FIXED
Alias: None
Product: WTP Common Tools
Classification: WebTools
Component: wst.common (show other bugs)
Version: 3.7   Edit
Hardware: PC Windows 7
: P1 normal (vote)
Target Milestone: 3.8.2   Edit
Assignee: Carl Anderson CLA
QA Contact: Carl Anderson CLA
URL:
Whiteboard:
Keywords:
Depends on:
Blocks: 509889 511793
  Show dependency tree
 
Reported: 2016-12-05 12:22 EST by Carl Anderson CLA
Modified: 2017-04-12 10:26 EDT (History)
3 users (show)

See Also:
cbridgha: review+


Attachments
Acquire the lock for StructureEdit in ComponentManager (2.35 KB, patch)
2016-12-05 14:01 EST, Carl Anderson CLA
no flags Details | Diff
Better placement of the lock acquire (2.03 KB, patch)
2016-12-14 08:13 EST, Carl Anderson CLA
no flags Details | Diff

Note You need to log in before you can comment on or make changes to this bug.
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)