remm        01/07/25 21:03:23

  Modified:    catalina/src/share/org/apache/catalina/connector/http
                        Constants.java HttpProcessor.java
  Log:
  - Fix for prohibitive shutdown times when using the HTTP/1.1 connector.
  - Now, unless the connector has successfully parsed the request line of a new
    request, it is not considered active. If the request line is parsed, the connector
    will remain in active state until the end of the processing of the request.
  - The shutdown method will only wait for 5s before returning if the processor
    is in active state.
  
  Revision  Changes    Path
  1.5       +6 -3      
jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/connector/http/Constants.java
  
  Index: Constants.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/connector/http/Constants.java,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- Constants.java    2001/07/22 20:25:07     1.4
  +++ Constants.java    2001/07/26 04:03:23     1.5
  @@ -1,7 +1,7 @@
   /*
  - * $Header: 
/home/cvs/jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/connector/http/Constants.java,v
 1.4 2001/07/22 20:25:07 pier Exp $
  - * $Revision: 1.4 $
  - * $Date: 2001/07/22 20:25:07 $
  + * $Header: 
/home/cvs/jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/connector/http/Constants.java,v
 1.5 2001/07/26 04:03:23 remm Exp $
  + * $Revision: 1.5 $
  + * $Date: 2001/07/26 04:03:23 $
    *
    * ====================================================================
    *
  @@ -78,5 +78,8 @@
       public static final String ServerInfo =
           Globals.SERVER_INFO + " (HTTP/1.1 Connector)";
       public static final int DEFAULT_CONNECTION_TIMEOUT = 60000;
  +
  +    public static final int PROCESSOR_IDLE = 0;
  +    public static final int PROCESSOR_ACTIVE = 1;
   
   }
  
  
  
  1.33      +29 -9     
jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/connector/http/HttpProcessor.java
  
  Index: HttpProcessor.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/connector/http/HttpProcessor.java,v
  retrieving revision 1.32
  retrieving revision 1.33
  diff -u -r1.32 -r1.33
  --- HttpProcessor.java        2001/07/22 20:25:07     1.32
  +++ HttpProcessor.java        2001/07/26 04:03:23     1.33
  @@ -1,6 +1,6 @@
  -/* * $Header: 
/home/cvs/jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/connector/http/HttpProcessor.java,v
 1.32 2001/07/22 20:25:07 pier Exp $
  - * $Revision: 1.32 $
  - * $Date: 2001/07/22 20:25:07 $
  +/* * $Header: 
/home/cvs/jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/connector/http/HttpProcessor.java,v
 1.33 2001/07/26 04:03:23 remm Exp $
  + * $Revision: 1.33 $
  + * $Date: 2001/07/26 04:03:23 $
    *
    * ====================================================================
    *
  @@ -106,7 +106,7 @@
    *
    * @author Craig R. McClanahan
    * @author Remy Maucherat
  - * @version $Revision: 1.32 $ $Date: 2001/07/22 20:25:07 $
  + * @version $Revision: 1.33 $ $Date: 2001/07/26 04:03:23 $
    */
   
   final class HttpProcessor
  @@ -311,6 +311,12 @@
       private HttpRequestLine requestLine = new HttpRequestLine();
   
   
  +    /**
  +     * Processor state
  +     */
  +    private int status = Constants.PROCESSOR_IDLE;
  +
  +
       // --------------------------------------------------------- Public Methods
   
   
  @@ -686,6 +692,11 @@
   
           // Parse the incoming request line
           input.readRequestLine(requestLine);
  +        
  +        // When the previous method returns, we're actually processing a 
  +        // request
  +        status = Constants.PROCESSOR_ACTIVE;
  +        
           String method =
               new String(requestLine.method, 0, requestLine.methodEnd);
           String uri = null;
  @@ -1022,10 +1033,15 @@
                   keepAlive = false;
               }
   
  +            // End of request processing
  +            status = Constants.PROCESSOR_IDLE;
  +
               // Recycling the request and the response objects
               request.recycle();
               response.recycle();
   
  +            ok = !stopped;
  +
           }
   
           try {
  @@ -1112,11 +1128,15 @@
   
           stopped = true;
           assign(null);
  -        synchronized (threadSync) {
  -            try {
  -                threadSync.wait(5000);
  -            } catch (InterruptedException e) {
  -                ;
  +
  +        if (status != Constants.PROCESSOR_IDLE) {
  +            // Only wait if the processor is actually processing a command
  +            synchronized (threadSync) {
  +                try {
  +                    threadSync.wait(5000);
  +                } catch (InterruptedException e) {
  +                    ;
  +                }
               }
           }
           thread = null;
  
  
  

Reply via email to