Bugs item #623223, was opened at 2002-10-14 22:45
You can respond by visiting:
https://sourceforge.net/tracker/?func=detail&atid=376685&aid=623223&group_id=22866
Category: JBossServer
Group: v2.4 (stable)
Status: Open
Resolution: None
Priority: 5
Submitted By: Jerome Lacoste (lacostej)
Assigned to: Nobody/Anonymous (nobody)
Summary: possible deadlock in log4j related code
Initial Comment:
OS: Windows NT 4
JDK 1.4.1
JBoss 2.4.7 binary distribution with Jetty 4.0.4
There is a possible deadlock in log4j related code. We
started experiencing this after adding a new MBean
service to our application. It is 100% reproducible.
The deadlock is due to the fact that the log4j
CategoryStreame uses a hack to log some lost messages.
This hack tries to renter log4j logging by calling
log() on the wrapped category. Upon certain conditions,
this will cause a deadlock.
Details:
Hitting Ctrl-Break on the hung program gives me the
following output:
[...]
Java stack information for the threads listed above:
===================================================
"Thread-23":
at
org.apache.log4j.Category.callAppenders(Category.java:253)
- waiting to lock <0328F228> (a
org.apache.log4j.spi.RootCategory)
at
org.apache.log4j.Category.forcedLog(Category.java:445)
at org.apache.log4j.Category.log(Category.java:864)
at
org.jboss.logging.log4j.CategoryStream.write(CategoryStream.java:91)
- locked <0329D410> (a
org.jboss.logging.log4j.CategoryStream) at
org.jboss.logging.log4j.CategoryStream.println(CategoryStream.java:49)
at
org.hsqldb.Embedded_ServerConnection.run(Embedded_ServerConnection.java:161)
at java.lang.Thread.run(Thread.java:536)
"Thread-2":
at java.io.PrintStream.flush(PrintStream.java:133)
- waiting to lock <0329D410> (a
org.jboss.logging.log4j.CategoryStream)
at
sun.nio.cs.StreamEncoder$CharsetSE.implFlush(StreamEncoder.java:408)
at
sun.nio.cs.StreamEncoder.flush(StreamEncoder.java:150)
- locked <0349E880> (a java.io.OutputStreamWriter)
at
java.io.OutputStreamWriter.flush(OutputStreamWriter.java:213)
at
org.apache.log4j.helpers.QuietWriter.flush(QuietWriter.java:49)
at
org.apache.log4j.WriterAppender.subAppend(WriterAppender.java:309)
at
org.apache.log4j.WriterAppender.append(WriterAppender.java:157)
at
org.apache.log4j.AppenderSkeleton.doAppend(AppenderSkeleton.java:251)
- locked <0349DB48> (a
org.apache.log4j.ConsoleAppender)
at
org.apache.log4j.helpers.AppenderAttachableImpl.appendLoopOnAppenders(AppenderAttachableImpl.java:57)
at
org.apache.log4j.Category.callAppenders(Category.java:255)
- locked <0328F228> (a
org.apache.log4j.spi.RootCategory)
at
org.apache.log4j.Category.forcedLog(Category.java:445)
[...]
Found 1 deadlock.
After having a look at the stack trace, it looks like
the lock is coming from this piece of code, within
org.jboss.logging.util.CategoryStream
// HACK, something is logging exceptions line by
line (including
// blanks), but I can't seem to find it, so for
now just ignore
// empty lines... they aren't very useful.
if (len != 0) {
String msg = new String(b, off, len);
category.log(priority, msg);
}
inWrite = false;
Hacks ain't good :)
Removing the call to category.log() removes the
deadlock in our current tests. But this does not solve
the problem.
I guess there are 2 solutions:
- find which logs were concerned by the hack, and
correct the problem, removing the hack
- try to make log4j reentrant.
The problem may be present in other versions of JBoss
(including the latest) as the current version of
CategoryStream still contains the HACK.
Patch coming.
----------------------------------------------------------------------
You can respond by visiting:
https://sourceforge.net/tracker/?func=detail&atid=376685&aid=623223&group_id=22866
-------------------------------------------------------
This sf.net email is sponsored by:ThinkGeek
Welcome to geek heaven.
http://thinkgeek.com/sf
_______________________________________________
Jboss-development mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/jboss-development