]> granicus.if.org Git - apache/commitdiff
Fix the core_output_filter. It doesn't make any sense to send less than
authorRyan Bloom <rbb@apache.org>
Tue, 23 Jan 2001 23:05:12 +0000 (23:05 +0000)
committerRyan Bloom <rbb@apache.org>
Tue, 23 Jan 2001 23:05:12 +0000 (23:05 +0000)
8K of a file using sendfile, it is easier to just read strings from the
file and use those strings directly.

git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@87800 13f79535-47bb-0310-9956-ffa450edef68

modules/http/http_core.c

index 381a740783045dc200128292b798ac44b945e39f..2755949da42648841981255edc175bf348f50e0f 100644 (file)
@@ -98,6 +98,8 @@
 #define AP_LIMIT_UNSET                  ((long) -1)
 #define AP_DEFAULT_LIMIT_XML_BODY       ((size_t)1000000)
 
+#define AP_MIN_SENDFILE_BYTES           (8*1024)
+
 /* Server core module... This module provides support for really basic
  * server operations, including options and commands which control the
  * operation of other modules.  Consider this the bureaucracy module.
@@ -3348,13 +3350,15 @@ static apr_status_t core_output_filter(ap_filter_t *f, apr_bucket_brigade *b)
             if (APR_BUCKET_IS_EOS(e) || APR_BUCKET_IS_FLUSH(e)) {
                 break;
             }
-            else if (APR_BUCKET_IS_FILE(e)) {
+            /* It doesn't make any sense to use sendfile for a file bucket
+             * that represents 10 bytes.
+             */
+            else if (APR_BUCKET_IS_FILE(e) && (e->length >= AP_MIN_SENDFILE_BYTES)) {
                 apr_bucket_shared *s = e->data;
                 apr_bucket_file *a = s->data;
-                /* Assume there is at most one APR_BUCKET_FILE in the brigade */
                 fd = a->fd;
                 flen = e->length;
-                foffset = a->offset;
+                foffset = s->start;
             }
             else {
                 const char *str;