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

Reply via email to