dgaudet 97/12/26 10:21:47
Modified: . STATUS
src CHANGES
src/main buff.c
Log:
Fix problem with chunking and bputc().
Don't use large_write() when nbytes == 1... otherwise we have really bad
performance at end of buffer with bputc().
Reviewed by: Rasmus Lerdorf, Jim Jagielski
Revision Changes Path
1.31 +5 -4 apachen/STATUS
Index: STATUS
===================================================================
RCS file: /export/home/cvs/apachen/STATUS,v
retrieving revision 1.30
retrieving revision 1.31
diff -u -r1.30 -r1.31
--- STATUS 1997/12/26 18:16:14 1.30
+++ STATUS 1997/12/26 18:21:43 1.31
@@ -54,9 +54,14 @@
* Dean's [PATCH] ap_snprintf should be more sane (fwd)
* Jim's/Ken's move of main/util_snprintf.c to ap/ap_snprintf.c
* [PATCH] Re: [BUGFIXES] Wrong GID for PID file and UMASK for logs
+ * Dean's [PATCH] fix Rasmus' chunking error
Available:
+ * [PATCH] PR#1366: fix result of send_fd_length
+ <[EMAIL PROTECTED]>
+ Status: Dean +1, Dirk +1
+
* Jim's [PATCH] ap_cpystrn() function (replace strncpy)
<[EMAIL PROTECTED]>
Status: Jim +1
@@ -68,10 +73,6 @@
* Ken's [PATCH] for PR#1195 (" in realm names)
<[EMAIL PROTECTED]>
Status: Ken +1, Dean +1, Jim +1
-
- * Dean's [PATCH] fix Rasmus' chunking error
- <[EMAIL PROTECTED]>
- Status: Dean +1, Rasmus +1, Jim +1
* Dean's [PATCH] mod_status cleanups
<[EMAIL PROTECTED]>
1.544 +6 -0 apachen/src/CHANGES
Index: CHANGES
===================================================================
RCS file: /export/home/cvs/apachen/src/CHANGES,v
retrieving revision 1.543
retrieving revision 1.544
diff -u -r1.543 -r1.544
--- CHANGES 1997/12/26 18:16:15 1.543
+++ CHANGES 1997/12/26 18:21:44 1.544
@@ -1,5 +1,11 @@
Changes with Apache 1.3b4
+ *) The large_write() changes tickled a bug in bputc(), this would
+ show up as certain modules not working with Internet Explorer 4.0.
+ Fix this bug, and also fix a performance bug related to bputc()
+ causing a large_write() -- don't do large_write() unless there's
+ at least two bytes to write. [Dean Gaudet]
+
*) Move the gid switching code into the child so that log files
and pid files are opened with the root gid.
[Gregory A Lundberg <[EMAIL PROTECTED]>]
1.53 +13 -3 apachen/src/main/buff.c
Index: buff.c
===================================================================
RCS file: /export/home/cvs/apachen/src/main/buff.c,v
retrieving revision 1.52
retrieving revision 1.53
diff -u -r1.52 -r1.53
--- buff.c 1997/12/23 02:03:54 1.52
+++ buff.c 1997/12/26 18:21:46 1.53
@@ -807,9 +807,16 @@
API_EXPORT(int) bflsbuf(int c, BUFF *fb)
{
char ss[1];
+ int rc;
ss[0] = c;
- return bwrite(fb, ss, 1);
+ rc = bwrite(fb, ss, 1);
+ /* We do start_chunk() here so that the bputc macro can be smaller
+ * and faster
+ */
+ if (rc == 1 && (fb->flags & B_CHUNK))
+ start_chunk(fb);
+ return rc;
}
/*
@@ -1056,9 +1063,12 @@
#ifndef NO_WRITEV
/*
* Detect case where we're asked to write a large buffer, and combine our
- * current buffer with it in a single writev()
+ * current buffer with it in a single writev(). Note we don't consider
+ * the case nbyte == 1 because modules which use rputc() loops will cause
+ * us to use writev() too frequently. In those cases we really should just
+ * start a new buffer.
*/
- if (fb->outcnt > 0 && nbyte + fb->outcnt >= fb->bufsiz) {
+ if (fb->outcnt > 0 && nbyte > 1 && nbyte + fb->outcnt >= fb->bufsiz) {
return large_write(fb, buf, nbyte);
}
#endif