You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by al...@locus.apache.org on 2000/08/26 00:35:58 UTC

cvs commit: jakarta-tomcat/src/share/org/apache/tomcat/core OutputBuffer.java Response.java

alex        00/08/25 15:35:57

  Modified:    src/share/org/apache/tomcat/core OutputBuffer.java
                        Response.java
  Log:
  Fix bug (BugRat #14) with flush() and flushBuffer() by making OutputBuffer.flush() actually work right
  
  Note that there's still a problem with Jasper -- I know the problem but I'm not sure how to fix it.  I'll post to tomcat-dev for advice
  
  Revision  Changes    Path
  1.3       +29 -10    jakarta-tomcat/src/share/org/apache/tomcat/core/OutputBuffer.java
  
  Index: OutputBuffer.java
  ===================================================================
  RCS file: /home/cvs/jakarta-tomcat/src/share/org/apache/tomcat/core/OutputBuffer.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- OutputBuffer.java	2000/08/11 06:14:06	1.2
  +++ OutputBuffer.java	2000/08/25 22:35:56	1.3
  @@ -140,9 +140,10 @@
   
   	// fit in buffer, great.
   	if( len <= avail ) {
  +	  // ??? should be < since if it's just barely full, we still
  +	  // want to flush now
   	    System.arraycopy(b, off, buf, count, len);
   	    count += len;
  -	    return;
   	}
   
   	// Optimization:
  @@ -152,7 +153,7 @@
   	// and still have some space for more. We'll still have 2 writes, but
   	// we write more on the first.
   
  -	if (len - avail < buf.length) {
  +	else if (len - avail < buf.length) {
   	    /* If the request length exceeds the size of the output buffer,
       	       flush the output buffer and then write the data directly.
   	       We can't avoid 2 writes, but we can write more on the second
  @@ -164,13 +165,20 @@
   	    System.arraycopy(b, off+avail, buf, count, len - avail);
   	    count+= len - avail;
   	    bytesWritten += len - avail;
  -	    return;
   	}
   
   	// len > buf.length + avail
  -	flushBytes();
  -	cm.doWrite( req, resp, b, off, len );
  +	else {
  +	  flushBytes();
  +	  cm.doWrite( req, resp, b, off, len );
  +	}
   
  +	// if called from within flush(), then immediately flush
  +	// remaining bytes
  +	if (doFlush) {
  +	  flushBytes();
  +	}
  +
   	return;
       }
   
  @@ -219,6 +227,8 @@
   
   	// fit in buffer, great.
   	if( len <= avail ) {
  +	  // ??? should be < since if it's just barely full, we still
  +	  // want to flush now
   	    System.arraycopy(c, off, cbuf, ccount, len);
   	    ccount += len;
   	    return;
  @@ -307,12 +317,21 @@
       }
   
       public void close() throws IOException {
  -	//nothing
  +      flush();
       }
   
  -    public void flush() throws IOException {
  -	System.out.println("No flush ");
  -    }
  +  private boolean doFlush = false;
  +
  +  synchronized public void flush() throws IOException {
  +    doFlush = true;
  +    if( state==CHAR_STATE )
  +      flushChars();
  +    else if (state==BYTE_STATE)
  +      flushBytes();
  +    else if (state==INITIAL_STATE)
  +      ;       // nothing written yet
  +    doFlush = false;
  +  }
       
       Hashtable encoders=new Hashtable();
       WriteConvertor conv;
  @@ -322,7 +341,7 @@
   	if( !gotEnc ) setConverter();
   
   	conv.write(c, off, len);
  -	conv.flush();
  +	conv.flush();	// ???
       }
   
       private void setConverter() {
  
  
  
  1.30      +5 -5      jakarta-tomcat/src/share/org/apache/tomcat/core/Response.java
  
  Index: Response.java
  ===================================================================
  RCS file: /home/cvs/jakarta-tomcat/src/share/org/apache/tomcat/core/Response.java,v
  retrieving revision 1.29
  retrieving revision 1.30
  diff -u -r1.29 -r1.30
  --- Response.java	2000/08/22 06:56:40	1.29
  +++ Response.java	2000/08/25 22:35:57	1.30
  @@ -1,7 +1,7 @@
   /*
  - * $Header: /home/cvs/jakarta-tomcat/src/share/org/apache/tomcat/core/Response.java,v 1.29 2000/08/22 06:56:40 costin Exp $
  - * $Revision: 1.29 $
  - * $Date: 2000/08/22 06:56:40 $
  + * $Header: /home/cvs/jakarta-tomcat/src/share/org/apache/tomcat/core/Response.java,v 1.30 2000/08/25 22:35:57 alex Exp $
  + * $Revision: 1.30 $
  + * $Date: 2000/08/25 22:35:57 $
    *
    * ====================================================================
    *
  @@ -482,8 +482,8 @@
   	// 	if (usingWriter == true && writer != null)
   	// 	    writer.flush();
   
  -	oBuffer.flushChars();
  -	oBuffer.flushBytes();
  +      oBuffer.flush();
  +
   	// 	if( out!=null ) out.reallyFlush();
   	// 	if(bBuffer!=null) bBuffer.flush();
   	    //}