remm        2005/06/15 08:27:33

  Modified:    jk/java/org/apache/coyote/ajp AjpAprProcessor.java
  Log:
  - Fix some basic issues with the AJP on APR implementation.
  - In particular, endRequest is no longer called twice (oops ...).
  
  Revision  Changes    Path
  1.2       +15 -25    
jakarta-tomcat-connectors/jk/java/org/apache/coyote/ajp/AjpAprProcessor.java
  
  Index: AjpAprProcessor.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-tomcat-connectors/jk/java/org/apache/coyote/ajp/AjpAprProcessor.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- AjpAprProcessor.java      9 Jun 2005 16:14:51 -0000       1.1
  +++ AjpAprProcessor.java      15 Jun 2005 15:27:33 -0000      1.2
  @@ -88,7 +88,7 @@
   
           readBodyMessage.appendByte(Constants.JK_AJP13_GET_BODY_CHUNK);
           readBodyMessage.appendInt(Constants.MAX_READ_SIZE);
  -        
  +
       }
   
   
  @@ -130,7 +130,7 @@
       /**
        * Char version of the message header.
        */
  -    protected char[] headerChar = new char[8*1024]; // FIXME: Size should be 
configurable
  +    //protected char[] headerChar = new char[8*1024];
   
   
       /**
  @@ -375,14 +375,12 @@
                       // (long keepalive), so that the processor should be 
recycled
                       // and the method should return true
                       rp.setStage(org.apache.coyote.Constants.STAGE_ENDED);
  -                    openSocket = true;
  -                    // Add the socket to the poller
  -                    endpoint.getPoller().add(socket, pool);
                       break;
                   }
  -                // FIXME: Check message type, process right away and break 
if 
  +                // Check message type, process right away and break if 
                   // not regular request processing
                   int type = headerMessage.getByte();
  +                // FIXME: Any other types which should be checked ?
                   if (type == Constants.JK_AJP13_CPING_REQUEST) {
                       headerMessage.reset();
                       headerMessage.appendByte(Constants.JK_AJP13_CPONG_REPLY);
  @@ -431,21 +429,6 @@
                   }
               }
   
  -            // Finish the handling of the request
  -            try {
  -                thrA.setCurrentStage(endpoint, "endRequest");
  -                rp.setStage(org.apache.coyote.Constants.STAGE_ENDINPUT);
  -                endRequest();
  -                // FXIME: Do one last flush
  -            } catch (IOException e) {
  -                error = true;
  -            } catch (Throwable t) {
  -                log.error("Error finishing request", t);
  -                // 500 - Internal Server Error
  -                response.setStatus(500);
  -                error = true;
  -            }
  -
               // If there was an error, make sure the request is counted as
               // and error, and update the statistics counter
               if (error) {
  @@ -459,9 +442,16 @@
               
           }
   
  +        // Add the socket to the poller
  +        if (!error) {
  +            endpoint.getPoller().add(socket, pool);
  +        } else {
  +            openSocket = false;
  +        }
  +
           rp.setStage(org.apache.coyote.Constants.STAGE_ENDED);
           recycle();
  -        
  +
           return openSocket;
           
       }
  @@ -1122,7 +1112,7 @@
           int headerLength = message.getHeaderLength();
   
           // Read the message header
  -        // FIXME: do crazy tricks to avoid doing two reads !!!!
  +        // FIXME: better buffering to avoid doing two reads !!!!
           if (first) {
               int nRead = Socket.recvt
                   (socket, buf, 0, headerLength, readTimeout);
  @@ -1131,7 +1121,7 @@
               if (nRead == headerLength) {
                   message.processHeader();
               } else {
  -                if (Status.APR_STATUS_IS_ETIMEDOUT(-nRead)) {
  +                if ((-nRead) == Status.ETIMEDOUT || (-nRead) == 
Status.TIMEUP) {
                       return false;
                   } else {
                       throw new IOException(sm.getString("iib.failedread"));
  @@ -1169,7 +1159,6 @@
        */
       protected void writeMessage(AjpMessage message) 
           throws IOException {
  -        // FIXME: Write to a temporary direct buffer
           message.end();
           if (Socket.send(socket, message.getBuffer(), 0, message.getLen()) < 
0)
               throw new IOException(sm.getString("iib.failedwrite"));
  @@ -1182,6 +1171,7 @@
       public void recycle() {
   
           // Recycle Request object
  +        first = true;
           request.recycle();
           response.recycle();
           headerMessage.reset();
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to