You are viewing a plain text version of this content. The canonical link for it is here.
Posted to java-dev@axis.apache.org by "Amitabh Misra (JIRA)" <ax...@ws.apache.org> on 2006/04/25 23:16:18 UTC

[jira] Created: (AXIS-2469) Java process hang due to Thread race condition in org.apache.axis.utils.JavaUtils::isEnumClass

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


[jira] Commented: (AXIS-2469) Java process hang due to Thread race condition in org.apache.axis.utils.JavaUtils::isEnumClass

Posted by "Bjorn Townsend (JIRA)" <ax...@ws.apache.org>.
    [ http://issues.apache.org/jira/browse/AXIS-2469?page=comments#action_12376505 ] 

Bjorn Townsend commented on AXIS-2469:
--------------------------------------

Amitabh,

This has been reported before:

http://issues.apache.org/jira/browse/AXIS-2284

And is fixed in Axis 1.4, due to be released shortly.

Thanks,
Bjorn

> 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


[jira] Resolved: (AXIS-2469) Java process hang due to Thread race condition in org.apache.axis.utils.JavaUtils::isEnumClass

Posted by "Jarek Gawor (JIRA)" <ax...@ws.apache.org>.
     [ http://issues.apache.org/jira/browse/AXIS-2469?page=all ]
     
Jarek Gawor resolved AXIS-2469:
-------------------------------

    Resolution: Fixed

> 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


---------------------------------------------------------------------
To unsubscribe, e-mail: axis-dev-unsubscribe@ws.apache.org
For additional commands, e-mail: axis-dev-help@ws.apache.org