Author: remm Date: Thu May 3 16:54:31 2007 New Revision: 535030 URL: http://svn.apache.org/viewvc?view=rev&rev=535030 Log: - Remove the didRead flag (an error checking hack). - If there is a read event, do at least one read on the connector (the buffer is necessarily empty, otherwise there would have been an error during the previous read event). - Side effect: EOFs can be reported using the END event, and exceptions can be reported as ERROR.
Modified: tomcat/tc6.0.x/trunk/java/org/apache/catalina/connector/CoyoteAdapter.java tomcat/tc6.0.x/trunk/java/org/apache/catalina/connector/InputBuffer.java tomcat/tc6.0.x/trunk/java/org/apache/catalina/connector/Request.java Modified: tomcat/tc6.0.x/trunk/java/org/apache/catalina/connector/CoyoteAdapter.java URL: http://svn.apache.org/viewvc/tomcat/tc6.0.x/trunk/java/org/apache/catalina/connector/CoyoteAdapter.java?view=diff&rev=535030&r1=535029&r2=535030 ============================================================================== --- tomcat/tc6.0.x/trunk/java/org/apache/catalina/connector/CoyoteAdapter.java (original) +++ tomcat/tc6.0.x/trunk/java/org/apache/catalina/connector/CoyoteAdapter.java Thu May 3 16:54:31 2007 @@ -127,10 +127,24 @@ request.getEvent().setEventType(CometEvent.EventType.END); request.getEvent().setEventSubType(null); } else { - request.getEvent().setEventType(CometEvent.EventType.READ); - request.getEvent().setEventSubType(null); - read = true; - request.resetDidRead(); + try { + // Fill the read buffer of the servlet layer + if (request.read()) { + read = true; + } + } catch (Exception e) { + error = true; + } + if (read) { + request.getEvent().setEventType(CometEvent.EventType.READ); + request.getEvent().setEventSubType(null); + } else if (error) { + request.getEvent().setEventType(CometEvent.EventType.ERROR); + request.getEvent().setEventSubType(CometEvent.EventSubType.CLIENT_DISCONNECT); + } else { + request.getEvent().setEventType(CometEvent.EventType.END); + request.getEvent().setEventSubType(null); + } } } else if (status == SocketStatus.DISCONNECT) { request.getEvent().setEventType(CometEvent.EventType.ERROR); @@ -170,7 +184,7 @@ } if (response.isClosed() || !request.isComet()) { res.action(ActionCode.ACTION_COMET_END, null); - } else if (!error && read && (!request.didRead() || request.getAvailable())) { + } else if (!error && read && request.getAvailable()) { // If this was a read and not all bytes have been read, or if no data // was read from the connector, then it is an error error = true; Modified: tomcat/tc6.0.x/trunk/java/org/apache/catalina/connector/InputBuffer.java URL: http://svn.apache.org/viewvc/tomcat/tc6.0.x/trunk/java/org/apache/catalina/connector/InputBuffer.java?view=diff&rev=535030&r1=535029&r2=535030 ============================================================================== --- tomcat/tc6.0.x/trunk/java/org/apache/catalina/connector/InputBuffer.java (original) +++ tomcat/tc6.0.x/trunk/java/org/apache/catalina/connector/InputBuffer.java Thu May 3 16:54:31 2007 @@ -99,12 +99,6 @@ /** - * Flag which if a read was performed. - */ - private boolean didRead = true; - - - /** * Byte chunk used to input bytes. */ private ByteChunk inputChunk = new ByteChunk(); @@ -274,28 +268,10 @@ coyoteRequest.action(ActionCode.ACTION_AVAILABLE, null); available = (coyoteRequest.getAvailable() > 0) ? 1 : 0; } - if ((available == 0) && !didRead) { - // This is a comet read and no read was done: at least one - // read can be made without blocking (in very rare cases, it will - // reach the end of the stream, for example if the bytes sent - // were from a next request, or if the request content-length is - // wrong) - available = 1; - } return available; } - public boolean didRead() { - return didRead; - } - - - public void resetDidRead() { - didRead = false; - } - - // ------------------------------------------------- Bytes Handling Methods @@ -317,7 +293,6 @@ return -1; state = BYTE_STATE; - didRead = true; int result = coyoteRequest.doRead(bb); Modified: tomcat/tc6.0.x/trunk/java/org/apache/catalina/connector/Request.java URL: http://svn.apache.org/viewvc/tomcat/tc6.0.x/trunk/java/org/apache/catalina/connector/Request.java?view=diff&rev=535030&r1=535029&r2=535030 ============================================================================== --- tomcat/tc6.0.x/trunk/java/org/apache/catalina/connector/Request.java (original) +++ tomcat/tc6.0.x/trunk/java/org/apache/catalina/connector/Request.java Thu May 3 16:54:31 2007 @@ -458,6 +458,15 @@ } + /** + * Clear cached encoders (to save memory for Comet requests). + */ + public boolean read() + throws IOException { + return (inputBuffer.realReadBytes(null, 0, 0) > 0); + } + + // -------------------------------------------------------- Request Methods @@ -2248,16 +2257,6 @@ } - public boolean didRead() { - return inputBuffer.didRead(); - } - - - public void resetDidRead() { - inputBuffer.resetDidRead(); - } - - // ------------------------------------------------------ Protected Methods --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]