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 "P E (JIRA)" <ax...@ws.apache.org> on 2007/04/04 21:08:32 UTC

[jira] Commented: (AXIS-2647) 100% CPU hang in TypeDesc.java:313

    [ https://issues.apache.org/jira/browse/AXIS-2647?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#action_12486743 ] 

P E commented on AXIS-2647:
---------------------------

Researching further, this is a definite thread safety problem in TypeDesc, specifically the fields fieldNameMap, fieldElementMap are accessed in a thread-unsafe manner in many functions, setFields(), getFieldNameForElement(), addFieldDesc(), getElementNameForField(), getAttributeNameForField(), getFieldByName(). I don't know enough about the engine to say whether the fieldNameMap can be accessed concurrently, but fieldElementMap obviously can be and is clearly broken.

> 100% CPU hang in TypeDesc.java:313
> ----------------------------------
>
>                 Key: AXIS-2647
>                 URL: https://issues.apache.org/jira/browse/AXIS-2647
>             Project: Axis
>          Issue Type: Bug
>          Components: Serialization/Deserialization
>    Affects Versions: 1.4
>         Environment: JDK 1.5.0_10 AMD64
> RHEL4 x64
>            Reporter: P E
>            Priority: Critical
>
> Basically we have a bunch of threads stuck within Axis consuming 100% of our CPU. This appears to be during deserialization of a response (from EBay API in this instance). My best guess would be some sort of thread-unsafe modification to the HashMap used by getFieldNameForElement(), resulting in a corrupted internal HashMap state and thusly infinite looping.
> ----------------------------------------------------------
> Name: http-8080-Processor51
> State: RUNNABLE
> Total blocked: 52  Total waited: 1,995
> Stack trace: 
> java.util.HashMap.get(HashMap.java:346)
> org.apache.axis.description.TypeDesc.getFieldNameForElement(TypeDesc.java:313)
> org.apache.axis.encoding.ser.BeanDeserializer.onStartChild(BeanDeserializer.java:197)
> org.apache.axis.encoding.DeserializationContext.startElement(DeserializationContext.java:1035)
> org.apache.axis.message.SAX2EventRecorder.replay(SAX2EventRecorder.java:165)
> org.apache.axis.message.MessageElement.publishToHandler(MessageElement.java:1141)
> org.apache.axis.message.RPCElement.deserialize(RPCElement.java:236)
> org.apache.axis.message.RPCElement.getParams(RPCElement.java:384)
> org.apache.axis.client.Call.invoke(Call.java:2467)
> org.apache.axis.client.Call.invoke(Call.java:2366)
> org.apache.axis.client.Call.invoke(Call.java:1812)
> com.automotive.app.content.ebay.api.EBayAPISoapBindingStub.getItem(EBayAPISoapBindingStub.java:7962)
> .....
> Name: http-8080-Processor25
> State: RUNNABLE
> Total blocked: 295  Total waited: 10,588
> Stack trace: 
> java.util.HashMap.get(HashMap.java:346)
> org.apache.axis.description.TypeDesc.getFieldNameForElement(TypeDesc.java:313)
> org.apache.axis.encoding.ser.BeanDeserializer.onStartChild(BeanDeserializer.java:197)
> org.apache.axis.encoding.DeserializationContext.startElement(DeserializationContext.java:1035)
> org.apache.axis.message.SAX2EventRecorder.replay(SAX2EventRecorder.java:165)
> org.apache.axis.message.MessageElement.publishToHandler(MessageElement.java:1141)
> org.apache.axis.message.RPCElement.deserialize(RPCElement.java:236)
> org.apache.axis.message.RPCElement.getParams(RPCElement.java:384)
> org.apache.axis.client.Call.invoke(Call.java:2467)
> org.apache.axis.client.Call.invoke(Call.java:2366)
> org.apache.axis.client.Call.invoke(Call.java:1812)
> com.automotive.app.content.ebay.api.EBayAPISoapBindingStub.getItem(EBayAPISoapBindingStub.java:7962)
> .....

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


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