https://issues.apache.org/bugzilla/show_bug.cgi?id=48694

pmones...@gmail.com changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|RESOLVED                    |REOPENED
         Resolution|FIXED                       |

--- Comment #5 from pmones...@gmail.com 2010-03-13 01:29:56 UTC ---
In fact the deadlock still exists in 6.0.26.
Under certain conditions (well using jrebel) I get:

Name: Thread-8
State: BLOCKED on java.lang.str...@1d6ebede owned by: Thread-10
Total blocked: 44  Total waited: 2

Stack trace: 
org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1395)
org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1361)

Name: Thread-10
State: BLOCKED on org.apache.catalina.loader.webappclassloa...@646f72d4 owned
by: Thread-8
Total blocked: 33  Total waited: 2

Stack trace: 
org.apache.catalina.loader.WebappClassLoader.findClass(WebappClassLoader.java)
org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1483)
org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1361)


At line 1395 replacing synchronized (name.intern()) { 
with
  synchronized (this) fixes the problem.

The issue with doing synchronized (name.intern()) { in public Class
loadClass(String name, boolean resolve)  is that it turn this method calls (at
least from what I could see) at line 1485 findClass(String name)

AND
public Class findClass(String name) at line 977 calls protected Class
findClassInternal(String name) which syncs on name.intern()

-- 
Configure bugmail: https://issues.apache.org/bugzilla/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are the assignee for the bug.

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org
For additional commands, e-mail: dev-h...@tomcat.apache.org

Reply via email to