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();
 
 
     /**

Reply via email to