Details
-
Bug
-
Status: Closed
-
Critical
-
Resolution: Won't Fix
-
2.0
-
None
-
None
Description
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)
[...]