Issue Details (XML | Word | Printable)

Key: AXIS-2498
Type: Bug Bug
Status: Open Open
Priority: Major Major
Assignee: Unassigned
Reporter: Manuel Mall
Votes: 2
Watchers: 2
Operations

If you were logged in you would be able to see more operations.
Axis

TypeMappingImpl is not thread safe

Created: 11/Jun/06 10:09 AM   Updated: 03/Sep/09 09:02 PM
Return to search
Component/s: Serialization/Deserialization
Affects Version/s: 1.4
Fix Version/s: None

Time Tracking:
Not Specified

File Attachments:
  Size
Text File Licensed for inclusion in ASF works AXIS-2498.patch 2006-06-12 02:50 AM Cyrille Le Clerc 8 kB
Java Source File Licensed for inclusion in ASF works SynchronizedMap.java 2006-06-12 02:50 AM Cyrille Le Clerc 4 kB
Java Source File Licensed for inclusion in ASF works TypeMappingImpl.java 2006-06-12 02:50 AM Cyrille Le Clerc 30 kB


 Description  « Hide
This issue originates from http://marc.theaimsgroup.com/?l=axis-user&m=114993403032512&w=2.

Original report and Cyrille's initial response below:

================================

   Hello Manuel,

   My understanding is the Stub#createCall invokes methods on an
instance of TypeMapping that is shared by the AxisEngine via the
TypeMappingRegistry. Unfortunately, this TypeMappingImpl is not
threadsafe.

   Here is a a draft patch that should fix it waiting for an official
patch. Note that I didn't succeed in reproducing the deadlock, I
patched according to my understanding of the problem.
   Moreover, I preferred to send you this draft/emergency patch before
doing extensive testings. It works on my samples but I didn't look at
the impact on performances (it should be limited ).

HOW TO US THIS PATCH ?

   Here is a draft patch to fix this issue. To use it, the easiest way
is to unzip axis-1.4-threadSafetyPatch.jar under /WEB-INF/classes
(classloader order).

PATCH DESCRIPTION
TypeMappingImpl.java is the only modified class. Modifications:
- use synchronized maps instead of plain HashMaps
- synchronize internalRegister() method to ensure atomicity of access
to maps in modification
- synchronize access to "namespaces" variable in setSupportedEncodings
to ensure atomicity of the clear-add sequence

   Hope this helps,

   Cyrille

--
Cyrille Le Clerc
cyrille.leclerc@pobox.com
cyrille.leclerc@fr.ibm.com
+33 6.61.33.69.86

On 6/10/06, Manuel Mall <manuel@apache.org> wrote:
> I am aware that this topic has been discussed a number of times, e.g.
> http://marc.theaimsgroup.com/?l=axis-user&m=113771126214607&w=2.
>
> I followed the advice that the locator is thread safe but the stub is
> not and as I have only stateless calls I have therefore a single
> instance of the serviceLocator and a new instance of the stub for each
> call.
>
> However, when I have many simultaneous client calls I get
> random "lock-ups" of the system. The threads always end up stuck in the
> same state, that is in a call to HashMap.containsKey (see below). The
> trace snippet is taken from a 'kill -3' output. There were around 20
> threads all with the identical trace. The only difference being the
> address in the '- locked <...> (a ...)' line, which is to be expected
> as I have separate instances of the stub.
>
> I had hoped that the fix to
> https://issues.apache.org/jira/browse/AXIS-2284 which is in Axis 1.4
> had addressed this issue. But even after switching to Axis 1.4 the
> problem remains. So it seems to me that there is another concurrent
> HashMap modification problem left in the Axis code in the area of the
> Type Mapping Registry.
>
> Needless to say that the problem only occurs on a multi CPU system.
>
> As I am really not familiar enough with the Axis internals I am
> wondering if anyone with more insight has a suggestion how to avoid
> this.
>
> Thanks
>
> Manuel
> -----
> "LandataWebPollRequestEventSlave:" prio=1 tid=0x8b48f0a0 nid=0x25cf
> runnable [0x8ac74000..0x8ac745f0]
> at java.util.HashMap.containsKey(HashMap.java:349)
> at java.util.HashMap$KeySet.contains(HashMap.java:873)
> at
> org.apache.axis.encoding.TypeMappingImpl.isRegistered(TypeMappingImpl.java:195)
> at
> org.apache.axis.encoding.TypeMappingDelegate.isRegistered(TypeMappingDelegate.java:136)
> at org.apache.axis.client.Call.registerTypeMapping(Call.java:2280)
> at org.apache.axis.client.Call.registerTypeMapping(Call.java:2322)
> at
> au.com.anstat.oscar.landata.webservices.externalwsdl.Portal_340Stub.createCall(Portal_340Stub.java:2494)
> - locked <0x91cb2dc8> (a
> au.com.anstat.oscar.landata.webservices.externalwsdl.Portal_340Stub)
> at
> au.com.anstat.oscar.landata.webservices.externalwsdl.Portal_340Stub.propertyCertificateList(Portal_340Stub.java:3979)
> at
> au.com.anstat.oscar.common.landata.Operation.doPropertyCertificateList(Operation.java:574)
>




 All   Comments   Work Log   Change History   Subversion Commits      Sort Order: Ascending order - Click to sort in descending order
No work has yet been logged on this issue.