Hi, We've been seeing the occasional deadlock in WebappClassLoader and upgraded to Tomcat 6.0.26 because of https://issues.apache.org/bugzilla/show_bug.cgi?id=48694.
The fix in 48694 does not seem to have gotten rid of the deadlock altogether. Here are 2 threads that are deadlocked. Name: DefaultQuartzScheduler_Worker-10 State: BLOCKED on java.lang.str...@4352d9c0 owned by: DefaultQuartzScheduler_Worker-1 Total blocked: 17 Total waited: 152 Stack trace: org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader .java:1395) org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader .java:1361) java.lang.ClassLoader.loadClassInternal(ClassLoader.java:320) - locked org.apache.catalina.loader.webappclassloa...@7f1e1bbf java.lang.ClassLoader.defineClass1(Native Method) java.lang.ClassLoader.defineClass(ClassLoader.java:621) java.security.SecureClassLoader.defineClass(SecureClassLoader.java:124) org.apache.catalina.loader.WebappClassLoader.findClassInternal(WebappCla ssLoader.java:2527) - locked java.lang.str...@39f9e067 org.apache.catalina.loader.WebappClassLoader.findClass(WebappClassLoader .java:1010) org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader .java:1483) - locked java.lang.str...@39f9e067 org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader .java:1361) javax.mail.Session.getService(Session.java:765) javax.mail.Session.getStore(Session.java:579) javax.mail.Session.getStore(Session.java:541) javax.mail.Session.getStore(Session.java:520) com.capeclear.capeconnect.transports.email.server.AbstractMailProtocolRe ader.getStore(AbstractMailProtocolReader.java:138) com.capeclear.capeconnect.transports.email.server.AbstractMailProtocolRe ader.openFolder(AbstractMailProtocolReader.java:444) com.capeclear.capeconnect.transports.email.server.AbstractMailProtocolRe ader.getFolder(AbstractMailProtocolReader.java:181) com.capeclear.capeconnect.transports.email.server.AbstractMailProtocolRe ader.connect(AbstractMailProtocolReader.java:211) com.capeclear.capeconnect.transports.email.server.AbstractMailProtocolRe ader.connect(AbstractMailProtocolReader.java:194) com.capeclear.capeconnect.transports.email.server.MailReader.accessUnrea dMail(MailReader.java:48) com.capeclear.capeconnect.transport.email.EmailInScheduledServerTranspor t.execute(EmailInScheduledServerTransport.java:156) - locked com.capeclear.capeconnect.transport.email.EmailInScheduledServerTranspor t...@43fba7ed com.capeclear.scheduler.impl.QuartzJob.execute(QuartzJob.java:44) org.quartz.core.JobRunShell.run(JobRunShell.java:202) org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java :529) Name: DefaultQuartzScheduler_Worker-1 State: BLOCKED on org.apache.catalina.loader.webappclassloa...@7f1e1bbf owned by: DefaultQuartzScheduler_Worker-10 Total blocked: 26 Total waited: 153 Stack trace: java.lang.ClassLoader.checkCerts(ClassLoader.java:752) java.lang.ClassLoader.preDefineClass(ClassLoader.java:488) java.lang.ClassLoader.defineClass(ClassLoader.java:615) java.security.SecureClassLoader.defineClass(SecureClassLoader.java:124) org.apache.catalina.loader.WebappClassLoader.findClassInternal(WebappCla ssLoader.java:2527) - locked java.lang.str...@4352d9c0 org.apache.catalina.loader.WebappClassLoader.findClass(WebappClassLoader .java:1010) org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader .java:1483) - locked java.lang.str...@4352d9c0 org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader .java:1361) javax.mail.Session.getService(Session.java:765) javax.mail.Session.getStore(Session.java:579) javax.mail.Session.getStore(Session.java:541) javax.mail.Session.getStore(Session.java:520) com.capeclear.capeconnect.transports.email.server.AbstractMailProtocolRe ader.getStore(AbstractMailProtocolReader.java:138) com.capeclear.capeconnect.transports.email.server.AbstractMailProtocolRe ader.openFolder(AbstractMailProtocolReader.java:444) com.capeclear.capeconnect.transports.email.server.AbstractMailProtocolRe ader.getFolder(AbstractMailProtocolReader.java:181) com.capeclear.capeconnect.transports.email.server.AbstractMailProtocolRe ader.connect(AbstractMailProtocolReader.java:211) com.capeclear.capeconnect.transports.email.server.AbstractMailProtocolRe ader.connect(AbstractMailProtocolReader.java:194) com.capeclear.capeconnect.transports.email.server.MailReader.accessUnrea dMail(MailReader.java:48) com.capeclear.capeconnect.transport.email.EmailInScheduledServerTranspor t.execute(EmailInScheduledServerTransport.java:156) - locked com.capeclear.capeconnect.transport.email.EmailInScheduledServerTranspor t...@3ecddb79 com.capeclear.scheduler.impl.QuartzJob.execute(QuartzJob.java:44) org.quartz.core.JobRunShell.run(JobRunShell.java:202) org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java :529) The issue seems to be rare enough but the name.intern() synchronization in WebappClassLoader seems not to work in this instance. The first trace in interesting in that it locks java.lang.str...@39f9e067 but then after going through java.lang.ClassLoader.defineClass we come back into WebappClassLoader where name.intern() returns java.lang.str...@4352d9c0. All I can think of is that java.lang.ClassLoader.defineClass has modified the name string in some way. The issue is going to be difficult to reproduce but I'll see if I can find out why the name string changes in the 1st trace. I am using javamail 1.4.3 and quartz 1.6.0. Would it make sense to use a threadlocal and put a flag on the thread the first time we lock the name.intern() and then not attempt a lock the 2nd time around? This is the part of the stack trace I am referring to: org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader .java:1361) java.lang.ClassLoader.loadClassInternal(ClassLoader.java:320) - locked org.apache.catalina.loader.webappclassloa...@7f1e1bbf java.lang.ClassLoader.defineClass1(Native Method) java.lang.ClassLoader.defineClass(ClassLoader.java:621) java.security.SecureClassLoader.defineClass(SecureClassLoader.java:124) org.apache.catalina.loader.WebappClassLoader.findClassInternal(WebappCla ssLoader.java:2527) - locked java.lang.str...@39f9e067 org.apache.catalina.loader.WebappClassLoader.findClass(WebappClassLoader .java:1010) org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader .java:1483) - locked java.lang.str...@39f9e067 org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader .java:1361) javax.mail.Session.getService(Session.java:765) Any insight would be appreciated. Regards, PJ Fanning