From 77188b407d304875b4ddf08cfcb694b74f805d12 Mon Sep 17 00:00:00 2001
From: Lars Eilebrecht
Date: Sat, 21 Feb 2009 17:07:01 +0000
Subject: [PATCH] fix mod_disk_cache to support EnableSendfile.
git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@746541 13f79535-47bb-0310-9956-ffa450edef68
---
CHANGES | 3 +++
docs/manual/mod/core.html.de | 6 ++++++
docs/manual/mod/core.html.en | 6 ++++++
docs/manual/mod/core.xml | 6 ++++++
docs/manual/mod/core.xml.de | 6 ++++++
docs/manual/mod/mod_disk_cache.html.en | 12 +++++++++++-
docs/manual/mod/mod_disk_cache.xml | 12 +++++++++++-
modules/cache/mod_disk_cache.c | 11 ++++++++++-
8 files changed, 59 insertions(+), 3 deletions(-)
diff --git a/CHANGES b/CHANGES
index fbddfd82e8..aa252afad7 100644
--- a/CHANGES
+++ b/CHANGES
@@ -1,6 +1,9 @@
-*- coding: utf-8 -*-
Changes with Apache 2.3.2
+ *) mod_disk_cache: The module now turns off sendfile support if
+ 'EnableSendfile off' is defined globally. [Lars Eilebrecht]
+
*) mod_deflate: Adjust content metadata before bailing out on 304
responses so that the metadata does not differ from 200 response.
[Roy T. Fielding]
diff --git a/docs/manual/mod/core.html.de b/docs/manual/mod/core.html.de
index a153451eff..892e1fd70c 100644
--- a/docs/manual/mod/core.html.de
+++ b/docs/manual/mod/core.html.de
@@ -978,6 +978,12 @@ Dateien an den Client auszuliefern
</Directory>
+ Beachten Sie bitte, dass die verzeichnisbasierte und
+ .htaccess-Konfiguration von EnableSendfile
+ nicht vom mod_disk_cache
-Modul unterstützt wird.
+ Nur die globale Konfiguration von EnableSendfile
+ wird vom Modul beachtet.
+
diff --git a/docs/manual/mod/core.html.en b/docs/manual/mod/core.html.en
index 8c3d7865c8..c4d8994b90 100644
--- a/docs/manual/mod/core.html.en
+++ b/docs/manual/mod/core.html.en
@@ -939,6 +939,12 @@ Locations
</Directory>
+ Please note that the per-directory and .htaccess configuration
+ of EnableSendfile
is not supported by
+ mod_disk_cache
.
+ Only global definition of EnableSendfile
+ is taken into account by the module.
+
diff --git a/docs/manual/mod/core.xml b/docs/manual/mod/core.xml
index c6b3aea437..fd172e34b4 100644
--- a/docs/manual/mod/core.xml
+++ b/docs/manual/mod/core.xml
@@ -900,6 +900,12 @@ Locations
</Directory>
+ Please note that the per-directory and .htaccess configuration
+ of EnableSendfile is not supported by
+ mod_disk_cache.
+ Only global definition of EnableSendfile
+ is taken into account by the module.
+
diff --git a/docs/manual/mod/core.xml.de b/docs/manual/mod/core.xml.de
index 2d12e67350..129df5f836 100644
--- a/docs/manual/mod/core.xml.de
+++ b/docs/manual/mod/core.xml.de
@@ -925,6 +925,12 @@ Dateien an den Client auszuliefern
</Directory>
+ Beachten Sie bitte, dass die verzeichnisbasierte und
+ .htaccess-Konfiguration von EnableSendfile
+ nicht vom mod_disk_cache-Modul unterstützt wird.
+ Nur die globale Konfiguration von EnableSendfile
+ wird vom Modul beachtet.
+
diff --git a/docs/manual/mod/mod_disk_cache.html.en b/docs/manual/mod/mod_disk_cache.html.en
index 136eace3d2..54966159d8 100644
--- a/docs/manual/mod/mod_disk_cache.html.en
+++ b/docs/manual/mod/mod_disk_cache.html.en
@@ -32,7 +32,7 @@
Summary
mod_disk_cache
implements a disk based storage
- manager. It is primarily of use in conjunction
+ manager. It is primarily of use in conjunction with
mod_cache
.
Content is stored in and retrieved from the cache using URI based
@@ -45,6 +45,16 @@
mod_disk_cache
requires the services of
mod_cache
.
+ Note:
+
mod_disk_cache
uses the sendfile feature to
+ serve files from the cache when supported by the platform, and
+ when enabled with EnableSendfile
.
+ However, per-directory and .htaccess configuration of
+ EnableSendfile
are ignored my
+ mod_disk_cache
as the corresponding settings are not
+ available to the module when a request is being served from the
+ cache.
+
Directives
diff --git a/docs/manual/mod/mod_disk_cache.xml b/docs/manual/mod/mod_disk_cache.xml
index de3df92ed9..a2ae881d5d 100644
--- a/docs/manual/mod/mod_disk_cache.xml
+++ b/docs/manual/mod/mod_disk_cache.xml
@@ -30,7 +30,7 @@
mod_disk_cache implements a disk based storage
- manager. It is primarily of use in conjunction
+ manager. It is primarily of use in conjunction with
mod_cache.
Content is stored in and retrieved from the cache using URI based
@@ -43,6 +43,16 @@
mod_disk_cache requires the services of
mod_cache.
+ Note:
+ mod_disk_cache uses the sendfile feature to
+ serve files from the cache when supported by the platform, and
+ when enabled with EnableSendfile.
+ However, per-directory and .htaccess configuration of
+ EnableSendfile are ignored my
+ mod_disk_cache as the corresponding settings are not
+ available to the module when a request is being served from the
+ cache.
+
diff --git a/modules/cache/mod_disk_cache.c b/modules/cache/mod_disk_cache.c
index 771ba930d6..3c48769451 100644
--- a/modules/cache/mod_disk_cache.c
+++ b/modules/cache/mod_disk_cache.c
@@ -376,6 +376,10 @@ static int open_entity(cache_handle_t *h, request_rec *r, const char *key)
static int error_logged = 0;
disk_cache_conf *conf = ap_get_module_config(r->server->module_config,
&disk_cache_module);
+#ifdef APR_SENDFILE_ENABLED
+ core_dir_config *coreconf = ap_get_module_config(r->per_dir_config,
+ &core_module);
+#endif
apr_finfo_t finfo;
cache_object_t *obj;
cache_info *info;
@@ -471,7 +475,12 @@ static int open_entity(cache_handle_t *h, request_rec *r, const char *key)
/* Open the data file */
flags = APR_READ|APR_BINARY;
#ifdef APR_SENDFILE_ENABLED
- flags |= APR_SENDFILE_ENABLED;
+ /* When we are in the quick handler we don't have the per-directory
+ * configuration, so this check only takes the globel setting of
+ * the EnableSendFile directive into account.
+ */
+ flags |= ((coreconf->enable_sendfile == ENABLE_SENDFILE_OFF)
+ ? 0 : APR_SENDFILE_ENABLED);
#endif
rc = apr_file_open(&dobj->fd, dobj->datafile, flags, 0, r->pool);
if (rc != APR_SUCCESS) {
--
2.40.0