On Sep 24, 2007, at 8:59 AM, James A. N. Stauffer wrote:
Does this provide any clues?
Yes, the problem is shown in the stack trace.
sps.webec.sql.ConnectionBroker uses log4j internally and is also used
to implement an log4j appender. The problem comes that the order of
obtaining locks is inconsistent. In the first thread it is:
synchronized(ConnectionBroker) {
synchronized(RootCategory) {
append message;
}
}
In the other thread it is:
synchronized(RootCategory) {
start DB appending
synchronized(ConnectionBroker) {
finish DB appending;
}
}
The deadlock occurs when each thread gets its first lock, but can't
get its second.
Do you have suggestions on what I should do?
If you are just using the sps.webec packages and have no ability to
change the code, you could work around the problem by configuration
changes so that the sps.webec.sql.ConnectionBroker logging requests
aren't sent to a sps.webec.server.util.DBAppender (at least
directly). If you know the logger names used in that code, you could
set the threshold to OFF, you could direct the logging requests to a
different type of appender (console or file). You could also wrap
the sps.webec.server.util.DBAppender with an AsyncAppender with
blocking = false.
If you do have ability to change the code, then you could look at the
possibility of moving the logging code in ConnectionBroker so that
logging occurs after the ConnectionBroker lock is released.
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]