Java process hang due to Thread race condition in
org.apache.axis.utils.JavaUtils::isEnumClass
-----------------------------------------------------------------------------------------------
Key: AXIS-2469
URL: http://issues.apache.org/jira/browse/AXIS-2469
Project: Apache Axis
Type: Bug
Components: Serialization/Deserialization
Versions: 1.2RC2, 1.2, 1.2RC3, 1.2.1, 1.3
Environment: Hardware: HP-UX B.11.11
Axis Java version in use: 1.2RC3
java -version
java version "1.4.2.10"
Java(TM) 2 Runtime Environment, Standard Edition (IBM build
1.4.2.10-060112-14:28 20060120)
Java HotSpot(TM) Server VM (build 1.4.2 1.4.2.10-060112-16:07-PA_RISC2.0 PA2.0
(aCC_AP), mixed mode)
IBM Java ORB build orb142-20060120 (SR4)
XML build XSLT4J Java 2.6.8
XML build XmlCommonsExternal 1.2.04
XML build XML4J 4.3.6
Reporter: Amitabh Misra
Priority: Critical
Please synchronize access to static member variable
org.apache.axis.utils.JavaUtils::enumMap. Multiple threads simultaneously
modifying this HashMap in method isEnumClass lead to internal corruption of
HashMap. Here are jvm memory traces from HP, where corruption of enumMap due to
circular dependency can be clearly seen. Check out all the values of
(Ljava/util/HashMap$Entry;) next. In an uncorrupted instance of HashMap, the
traversing through java.util.HapMapEntry.next should lead to a null in the end.
Here the last next points back to an Entry already traversed, leading to
hanging of the thread that called HashMap.get().
The hash entries..
gdb) java obj $r4
_mark = 0x1, _klass = 0x30883758, instance of type java/util/HashMap$Entry
The instance size is 6 words.
java/lang/Object:
java/util/HashMap$Entry:
(Ljava/lang/Object;) key= 0x3489f5d0
(Ljava/lang/Object;) value= 0x388e9c50
(I) hash= -1719484955
(Ljava/util/HashMap$Entry;) next= 0x44110400
(gdb) java obj 0x44110400
_mark = 0x9, _klass = 0x30883758, instance of type java/util/HashMap$Entry
The instance size is 6 words.
java/lang/Object:
java/util/HashMap$Entry:
(Ljava/lang/Object;) key= 0x35b23220
(Ljava/lang/Object;) value= 0x388e9c50
(I) hash= 209820133
(Ljava/util/HashMap$Entry;) next= 0x42631f90
(gdb) java obj 0x42631f90
_mark = 0x1, _klass = 0x30883758, instance of type java/util/HashMap$Entry
The instance size is 6 words.
java/lang/Object:
java/util/HashMap$Entry:
(Ljava/lang/Object;) key= 0x3489f5d0
(Ljava/lang/Object;) value= 0x388e9c50
(I) hash= -1719484955
(Ljava/util/HashMap$Entry;) next= 0x44110400 <== This value should be null,
instead of pointing to an earlier entry, if HashMap was uncorrupted.
Full stack trace.
#0 0x78cdf888 in compiled frame:
java.util.HashMap::get (java.lang.Object) ->java.lang.Object
#1 0x78c3b0f0 in i2c_adapter frame
#2 0x78c02e08 in interpreted frame:
org.apache.axis.utils.JavaUtils::isEnumClass (java.lang.Class) ->boolean
#3 0x78c02d84 in interpreted frame:
org.apache.axis.encoding.ser.BeanSerializerFactory::<init> (java.lang.Class,
javax.xml.namespace.QName) ->void
#4 0x78c3fd90 in c2i_adapter frame
#5 0x79236ecc in compiled frame:
org.apache.axis.encoding.ser.BaseSerializerFactory::createFactory
(java.lang.Class, java.lang.Class, javax.xml.namespace.QName)
->org.apache.axis.enco
ding.SerializerFactory
#6 0x79238640 in compiled frame:
org.apache.axis.client.Call::registerTypeMapping (java.lang.Class,
javax.xml.namespace.QName, java.lang.Class, java.lang.Class, boolean) ->void
#7 0x7919a240 in i2c_adapter frame
#8 0x78c02ee4 in interpreted frame:
com.wellsfargo.service.provider.HCFG.servicing.accountInquiry._2005.GetAccountInquirySoapBindingStub::createCall
()
->org.apache.axis.client.Call
#9 0x78c02e08 in interpreted frame:
com.wellsfargo.service.provider.HCFG.servicing.accountInquiry._2005.GetAccountInquirySoapBindingStub::getAccountInq
uiry
(com.wellsfargo.service.provider.HCFG.servicing.accountInquiry.getAccountInquiry._2005.GetAccountInquiryRequest_Type)
->com.wellsfargo.service.prov
ider.HCFG.servicing.accountInquiry.getAccountInquiry._2005.GetAccountInquiryResponse_Type
#10 0x78c00100 in Java entry frame
#11 0xc8ac1f08 in JavaCalls::call_helper+0x1d8 () from
/core2/carolina/wells424/libjvm.sl
#12 0xc8c3d664 in os::os_exception_wrapper+0x34 () from
/core2/carolina/wells424/libjvm.sl
#13 0xc8ac1d04 in JavaCalls::call+0x8c () from
/core2/carolina/wells424/libjvm.sl
#14 0xc8c90958 in Reflection::invoke+0x278 () from
/core2/carolina/wells424/libjvm.sl
#15 0xc8c950d4 in Reflection::invoke_method+0x114 () from
/core2/carolina/wells424/l
Please write to me if you have questions.
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
http://issues.apache.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see:
http://www.atlassian.com/software/jira