Hi, I noticed something peculiar while browsing through the sources of Tomcat/Catalina. Both HttpProcessor and HttpConnector use a private String object to synchronize their threads on: private String threadSync = ""; The JLS requires that all static String be 'intern'ed so they all refer to the same String Object. See the Java Language Spec. 3.10.5 (http://java.sun.com/docs/books/jls/second_edition/html/lexical.doc.html) This means that all HttpProcessors and HttpConnectors use the same object to synchronize on! Unless this is intentional (which I doubt) it suggest both be replaced by private Object threadSync = new Object(); Luc Vanlerberghe
Index: HttpConnector.java =================================================================== RCS file: /home/cvspublic/jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/connector/http/HttpConnector.java,v retrieving revision 1.5 diff -u -r1.5 HttpConnector.java --- HttpConnector.java 2000/12/16 19:01:23 1.5 +++ HttpConnector.java 2000/12/22 15:42:37 @@ -253,7 +253,7 @@ /** * The thread synchronization object. */ - private String threadSync = ""; + private Object threadSync = new Object(); /** Index: HttpProcessor.java =================================================================== RCS file: /home/cvspublic/jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/connector/http/HttpProcessor.java,v retrieving revision 1.18 diff -u -r1.18 HttpProcessor.java --- HttpProcessor.java 2000/12/17 01:05:40 1.18 +++ HttpProcessor.java 2000/12/22 15:42:38 @@ -242,7 +242,7 @@ /** * The thread synchronization object. */ - private String threadSync = ""; + private Object threadSync = new Object(); /**