You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@commons.apache.org by "Henri Yandell (JIRA)" <ji...@apache.org> on 2007/09/20 07:35:12 UTC

[jira] Commented: (LANG-349) Deadlock using ReflectionToStringBuilder

    [ https://issues.apache.org/jira/browse/LANG-349?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#action_12528983 ] 

Henri Yandell commented on LANG-349:
------------------------------------

Without being very deep into the code - wrapping the builder usage does seem like a good solution. Did you give that a try?

That's something that the documentation could suggest users do. 

I imagine a synchronized version of the ToStringBuilders could definitely be done - just a question of putting together the patch etc :) I'm not sure if it would get you much that putting a lock around the ToStringBuilder usage wouldn't have given you.

> Deadlock using ReflectionToStringBuilder
> ----------------------------------------
>
>                 Key: LANG-349
>                 URL: https://issues.apache.org/jira/browse/LANG-349
>             Project: Commons Lang
>          Issue Type: Bug
>    Affects Versions: 2.0
>         Environment: java version "1.5.0_10"
> Java(TM) 2 Runtime Environment, Standard Edition (build 1.5.0_10-b03)
> Java HotSpot(TM) Server VM (build 1.5.0_10-b03, mixed mode)
> >uname -a
> Linux fwjsfimat04 2.4.21-32.EL #1 SMP Fri Apr 15 21:02:58 EDT 2005 x86_64 x86_64 x86_64 GNU/Linux
>            Reporter: David I.
>            Priority: Critical
>             Fix For: 2.4
>
>
> I used the ReflectionToStringBuilder on an object to output debugging messages to Log4j. If this object was picked up by two different threads and the toString() method was called at the same time in two different threads, a deadlock occurrs.
> Here is a stack trace from using jstack:
> Thread 1172: (state = BLOCKED)
>  - java.util.Vector.hashCode() @bci=0, line=938 (Interpreted frame)
>  - java.util.HashMap.containsKey(java.lang.Object) @bci=6, line=377 (Compiled frame)
>  - org.apache.commons.lang.builder.ReflectionToStringBuilder.toString() @bci=50, line=522 (Compiled frame)
>  - org.apache.commons.lang.builder.ReflectionToStringBuilder.toString(java.lang.Object, org.apache.commons.lang.builder.ToStringStyle, boolean, java.lang.Class) @bci=12, line=265 (Interpreted frame)
>  - org.apache.commons.lang.builder.ReflectionToStringBuilder.toString(java.lang.Object, org.apache.commons.lang.builder.ToStringStyle) @bci=4, line=197 (Interpreted frame)
>  - org.apache.commons.lang.builder.ToStringBuilder.reflectionToString(java.lang.Object, org.apache.commons.lang.builder.ToStringStyle) @bci=2, line=170 (Interpreted frame)
> [...]
> Thread 1191: (state = BLOCKED)
>  - java.util.Vector.hashCode() @bci=0, line=938 (Interpreted frame)
>  - java.util.HashMap.containsKey(java.lang.Object) @bci=6, line=377 (Compiled frame)
>  - org.apache.commons.lang.builder.ReflectionToStringBuilder.toString() @bci=50, line=522 (Compiled frame)
>  [...]

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