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

Bug 332963

Summary: Deadlock initializing Java EE EMF models - CommonPackageImpl
Product: [WebTools] WTP Java EE Tools Reporter: Carl Anderson <ccc>
Component: jst.j2eeAssignee: Carl Anderson <ccc>
Status: RESOLVED FIXED QA Contact: Chuck Bridgham <cbridgha>
Severity: major    
Priority: P2 Flags: cbridgha: review+
Version: 3.2   
Target Milestone: 3.2.3   
Hardware: PC   
OS: Windows XP   
Whiteboard:
Attachments:
Description Flags
Remove Webservice_clientPackageImpl from the separate init thread none

Description Carl Anderson CLA 2010-12-20 12:36:57 EST
An adopter product is now running into the situation where the initialization of CommonPacakgeImpl is causing a deadlock.

3XMTHREADINFO      "main" J9VMThread:0x41591300, j9thread_t:0x0001504C, java/lang/Thread:0x00556868, state:CW, prio=6
3XMTHREADINFO1            (native thread ID:0x1B58, native priority:0x6, native policy:UNKNOWN)
3XMTHREADINFO3           Java callstack:
4XESTACKTRACE                at java/lang/Object.wait(Native Method)
4XESTACKTRACE                at java/lang/Object.wait(Bytecode PC:3(Compiled Code))
4XESTACKTRACE                at java/lang/J9VMInternals.initialize(Bytecode PC:3(Compiled Code))
4XESTACKTRACE                at sun/misc/Unsafe.ensureClassInitialized(Native Method)
4XESTACKTRACE                at sun/reflect/UnsafeFieldAccessorFactory.newFieldAccessor(Bytecode PC:79(Compiled Code))
4XESTACKTRACE                at sun/reflect/ReflectionFactory.newFieldAccessor(Bytecode PC:5(Compiled Code))
4XESTACKTRACE                at java/lang/reflect/Field.acquireFieldAccessor(Bytecode PC:94(Compiled Code))
4XESTACKTRACE                at java/lang/reflect/Field.getFieldAccessor(Bytecode PC:36(Compiled Code))
4XESTACKTRACE                at java/lang/reflect/Field.get(Bytecode PC:2)
4XESTACKTRACE                at org/eclipse/emf/ecore/plugin/RegistryReader$EPackageDescriptor.getEPackage(RegistryReader.java:274)
4XESTACKTRACE                at org/eclipse/emf/ecore/impl/EPackageImpl$1.getEPackage(EPackageImpl.java:168)
4XESTACKTRACE                at org/eclipse/emf/ecore/impl/EPackageRegistryImpl.getEPackage(EPackageRegistryImpl.java:133)
4XESTACKTRACE                at org/eclipse/jst/j2ee/common/internal/impl/CommonPackageImpl.initializePackageContents(CommonPackageImpl.java:1332)
4XESTACKTRACE                at org/eclipse/jst/j2ee/common/internal/impl/CommonPackageImpl.init(CommonPackageImpl.java:297)
4XESTACKTRACE                at org/eclipse/jst/j2ee/common/CommonPackage.<clinit>(CommonPackage.java:243)
4XESTACKTRACE                at java/lang/J9VMInternals.initializeImpl(Native Method)
4XESTACKTRACE                at java/lang/J9VMInternals.initialize(Bytecode PC:297(Compiled Code))

3XMTHREADINFO      "Thread-18" J9VMThread:0x46BBC000, j9thread_t:0x45C0DF90, java/lang/Thread:0x3FBF8280, state:CW, prio=6
3XMTHREADINFO1            (native thread ID:0x494, native priority:0x6, native policy:UNKNOWN)
3XMTHREADINFO3           Java callstack:
4XESTACKTRACE                at java/lang/Object.wait(Native Method)
4XESTACKTRACE                at java/lang/Object.wait(Bytecode PC:3(Compiled Code))
4XESTACKTRACE                at java/lang/J9VMInternals.initialize(Bytecode PC:3(Compiled Code))
4XESTACKTRACE                at sun/misc/Unsafe.ensureClassInitialized(Native Method)
4XESTACKTRACE                at sun/reflect/UnsafeFieldAccessorFactory.newFieldAccessor(Bytecode PC:79(Compiled Code))
4XESTACKTRACE                at sun/reflect/ReflectionFactory.newFieldAccessor(Bytecode PC:5(Compiled Code))
4XESTACKTRACE                at java/lang/reflect/Field.acquireFieldAccessor(Bytecode PC:94(Compiled Code))
4XESTACKTRACE                at java/lang/reflect/Field.getFieldAccessor(Bytecode PC:36(Compiled Code))
4XESTACKTRACE                at java/lang/reflect/Field.get(Bytecode PC:2)
4XESTACKTRACE                at org/eclipse/emf/ecore/plugin/RegistryReader$EPackageDescriptor.getEPackage(RegistryReader.java:274)
4XESTACKTRACE                at org/eclipse/emf/ecore/impl/EPackageRegistryImpl.getEPackage(EPackageRegistryImpl.java:133)
4XESTACKTRACE                at org/eclipse/jst/j2ee/webservice/wsclient/internal/impl/Webservice_clientPackageImpl.initializePackageContents(Webservice_clientPackageImpl.java:452)
4XESTACKTRACE                at org/eclipse/jst/j2ee/webservice/wsclient/internal/impl/Webservice_clientPackageImpl.init(Webservice_clientPackageImpl.java:141)
4XESTACKTRACE                at org/eclipse/jst/j2ee/webservice/wsclient/Webservice_clientPackage.<clinit>(Webservice_clientPackage.java:75)
4XESTACKTRACE                at java/lang/J9VMInternals.initializeImpl(Native Method)
4XESTACKTRACE                at java/lang/J9VMInternals.initialize(Bytecode PC:297(Compiled Code))
4XESTACKTRACE                at sun/misc/Unsafe.ensureClassInitialized(Native Method)
4XESTACKTRACE                at sun/reflect/UnsafeFieldAccessorFactory.newFieldAccessor(Bytecode PC:79(Compiled Code))
4XESTACKTRACE                at sun/reflect/ReflectionFactory.newFieldAccessor(Bytecode PC:5(Compiled Code))
4XESTACKTRACE                at java/lang/reflect/Field.acquireFieldAccessor(Bytecode PC:94(Compiled Code))
4XESTACKTRACE                at java/lang/reflect/Field.getFieldAccessor(Bytecode PC:36(Compiled Code))
4XESTACKTRACE                at java/lang/reflect/Field.get(Bytecode PC:2)
4XESTACKTRACE                at org/eclipse/emf/ecore/plugin/RegistryReader$EPackageDescriptor.getEPackage(RegistryReader.java:274)
4XESTACKTRACE                at org/eclipse/emf/ecore/impl/EPackageRegistryImpl.getEPackage(EPackageRegistryImpl.java:133)
4XESTACKTRACE                at org/eclipse/jst/j2ee/internal/J2EEInit$20.run(J2EEInit.java:343)
4XESTACKTRACE                at java/lang/Thread.run(Bytecode PC:13)
Comment 1 Carl Anderson CLA 2010-12-20 12:45:27 EST
Created attachment 185569 [details]
Remove Webservice_clientPackageImpl from the separate init thread

In bug 315286, I put in a directed ordering of the initialization.  The only part that I was unsure of how to handle was CommonPackageImpl and Webservices_clientPackageImpl initializations- the latter requires quite a few fields of the former, but the former requires one field of the latter, thus there is no good way to initialize the two of them in a directed manner.

The problem here is that CommonPackageImpl is being initialized, it kicks off J2EEInit.initEMFModels(), which quickly initializes Webservices_clientPackageImpl, and the two deadlock.  Switching their order only moves the problem from one place to another.

My solution is simple- remove Webservices_clientPackageImpl from J2EEInit.initEMFModels().  This will ensure that CommonPackageImpl is initialized first... and the initialization of Webservices_clientPackageImpl will be done as part of CommonPackageImpl.initializePackageContents().
Comment 2 Chuck Bridgham CLA 2011-01-04 11:43:41 EST
approve
Comment 3 Carl Anderson CLA 2011-01-05 12:27:35 EST
Committed to R3_2_maintenance and HEAD for WTP 3.2.3 and WTP 3.3 M5