Hi,

since some time we are experiencing a deadlock in the mordred connection
pool. It seems that this deadlock occurs only when sql queries take very
long.

The attached patch goes a little further than just fixing the bug. I don't
think it is wise to kill a connection after a minute execution time. Judge
for yourself.

Cheers,
  Marcus

excerpt from a typical thread dump:

Found one Java-level deadlock:
=============================
"default Worker #4":
  waiting to lock monitor 0x8856f1c (object 0x44b4d568, a
org.apache.james.util.mordred.PoolConnEntry),
  which is held by "Thread-3"
"Thread-3":
  waiting to lock monitor 0x8856ffc (object 0x44b40138, a java.util.Vector),
  which is held by "default Worker #4"

Java stack information for the threads listed above:
===================================================
"default Worker #4":
        at
org.apache.james.util.mordred.PoolConnEntry.lock(PoolConnEntry.java:110)
        - waiting to lock <0x44b4d568> (a
org.apache.james.util.mordred.PoolConnEntry)
        at
org.apache.james.util.mordred.JdbcDataSource.getConnection(JdbcDataSource.ja
va:178)
        - locked <0x44b40138> (a java.util.Vector)
        at
org.apache.james.mailrepository.JDBCSpoolRepository.loadPendingMessages(JDBC
SpoolRepository.java:281)
        - locked <0x44b5f218> (a java.util.LinkedList)
        at
org.apache.james.mailrepository.JDBCSpoolRepository.getNextPendingMessage(JD
BCSpoolRepository.java:256)
        - locked <0x44b5f218> (a java.util.LinkedList)
        at
org.apache.james.mailrepository.JDBCSpoolRepository.accept(JDBCSpoolReposito
ry.java:154)
        at
org.apache.james.transport.JamesSpoolManager.run(JamesSpoolManager.java:350)
        at
org.apache.avalon.excalibur.thread.impl.ExecutableRunnable.execute(Executabl
eRunnable.java:47)
        at
org.apache.avalon.excalibur.thread.impl.WorkerThread.run(WorkerThread.java:8
0)
        - locked <0x44ba24b0> (a
org.apache.avalon.excalibur.thread.impl.WorkerThread)
"Thread-3":
        at java.util.Vector.removeElement(Vector.java:605)
        - waiting to lock <0x44b40138> (a java.util.Vector)
        at
org.apache.james.util.mordred.JdbcDataSource.finalizeEntry(JdbcDataSource.ja
va:579)
        - locked <0x44b400b0> (a
org.apache.james.util.mordred.JdbcDataSource)
        at
org.apache.james.util.mordred.JdbcDataSource.run(JdbcDataSource.java:452)
        - locked <0x44b4d568> (a
org.apache.james.util.mordred.PoolConnEntry)
        at java.lang.Thread.run(Thread.java:536)


Attachment: james.diff
Description: Binary data

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to