You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@httpd.apache.org by st...@apache.org on 2005/03/06 13:52:47 UTC
svn commit: r156306 - httpd/httpd/trunk/modules/cache/mod_disk_cache.c
Author: striker
Date: Sun Mar 6 04:52:46 2005
New Revision: 156306
URL: http://svn.apache.org/viewcvs?view=rev&rev=156306
Log:
Tracked down by Justin Erenkrantz.
* modules/cache/mod_disk_cache.c
(store_headers): Stop second guessing mod_cache and just store the
headers in a new file (overwriting the old).
Modified:
httpd/httpd/trunk/modules/cache/mod_disk_cache.c
Modified: httpd/httpd/trunk/modules/cache/mod_disk_cache.c
URL: http://svn.apache.org/viewcvs/httpd/httpd/trunk/modules/cache/mod_disk_cache.c?view=diff&r1=156305&r2=156306
==============================================================================
--- httpd/httpd/trunk/modules/cache/mod_disk_cache.c (original)
+++ httpd/httpd/trunk/modules/cache/mod_disk_cache.c Sun Mar 6 04:52:46 2005
@@ -529,89 +529,83 @@
apr_size_t amt;
disk_cache_object_t *dobj = (disk_cache_object_t*) h->cache_obj->vobj;
- if (!dobj->hfd) {
- disk_cache_info_t disk_info;
- struct iovec iov[2];
-
- /* This is flaky... we need to manage the cache_info differently */
- h->cache_obj->info = *info;
-
- /* Remove old file with the same name. If remove fails, then
- * perhaps we need to create the directory tree where we are
- * about to write the new headers file.
- */
- rv = apr_file_remove(dobj->hdrsfile, r->pool);
- if (rv != APR_SUCCESS) {
- mkdir_structure(conf, dobj->hdrsfile, r->pool);
- }
+ disk_cache_info_t disk_info;
+ struct iovec iov[2];
- rv = apr_file_open(&dobj->hfd, dobj->hdrsfile,
- APR_WRITE | APR_CREATE | APR_EXCL,
- APR_OS_DEFAULT, r->pool);
- if (rv != APR_SUCCESS) {
- return rv;
- }
- dobj->name = h->cache_obj->key;
+ /* This is flaky... we need to manage the cache_info differently */
+ h->cache_obj->info = *info;
- disk_info.format = DISK_FORMAT_VERSION;
- disk_info.date = info->date;
- disk_info.expire = info->expire;
- disk_info.entity_version = dobj->disk_info.entity_version++;
- disk_info.request_time = info->request_time;
- disk_info.response_time = info->response_time;
- disk_info.status = info->status;
-
- disk_info.name_len = strlen(dobj->name);
-
- iov[0].iov_base = (void*)&disk_info;
- iov[0].iov_len = sizeof(disk_cache_info_t);
- iov[1].iov_base = dobj->name;
- iov[1].iov_len = disk_info.name_len;
+ /* Remove old file with the same name. If remove fails, then
+ * perhaps we need to create the directory tree where we are
+ * about to write the new headers file.
+ */
+ rv = apr_file_remove(dobj->hdrsfile, r->pool);
+ if (rv != APR_SUCCESS) {
+ mkdir_structure(conf, dobj->hdrsfile, r->pool);
+ }
- rv = apr_file_writev(dobj->hfd, (const struct iovec *) &iov, 2, &amt);
- if (rv != APR_SUCCESS) {
- return rv;
- }
+ rv = apr_file_open(&dobj->hfd, dobj->hdrsfile,
+ APR_WRITE | APR_CREATE | APR_EXCL,
+ APR_OS_DEFAULT, r->pool);
+ if (rv != APR_SUCCESS) {
+ return rv;
+ }
+ dobj->name = h->cache_obj->key;
- if (r->headers_out) {
- apr_table_t *headers_out;
+ disk_info.format = DISK_FORMAT_VERSION;
+ disk_info.date = info->date;
+ disk_info.expire = info->expire;
+ disk_info.entity_version = dobj->disk_info.entity_version++;
+ disk_info.request_time = info->request_time;
+ disk_info.response_time = info->response_time;
+ disk_info.status = info->status;
+
+ disk_info.name_len = strlen(dobj->name);
+
+ iov[0].iov_base = (void*)&disk_info;
+ iov[0].iov_len = sizeof(disk_cache_info_t);
+ iov[1].iov_base = dobj->name;
+ iov[1].iov_len = disk_info.name_len;
+
+ rv = apr_file_writev(dobj->hfd, (const struct iovec *) &iov, 2, &amt);
+ if (rv != APR_SUCCESS) {
+ return rv;
+ }
- headers_out = ap_cache_cacheable_hdrs_out(r->pool, r->headers_out,
- r->server);
+ if (r->headers_out) {
+ apr_table_t *headers_out;
- if (!apr_table_get(headers_out, "Content-Type") &&
- r->content_type) {
- apr_table_setn(headers_out, "Content-Type",
- ap_make_content_type(r, r->content_type));
- }
-
- headers_out = apr_table_overlay(r->pool, headers_out,
- r->err_headers_out);
- rv = store_table(dobj->hfd, headers_out);
- if (rv != APR_SUCCESS) {
- return rv;
- }
+ headers_out = ap_cache_cacheable_hdrs_out(r->pool, r->headers_out,
+ r->server);
+ if (!apr_table_get(headers_out, "Content-Type")
+ && r->content_type) {
+ apr_table_setn(headers_out, "Content-Type",
+ ap_make_content_type(r, r->content_type));
}
- /* Parse the vary header and dump those fields from the headers_in. */
- /* Make call to the same thing cache_select_url calls to crack Vary. */
- /* @@@ Some day, not today. */
- if (r->headers_in) {
- apr_table_t *headers_in;
-
- headers_in = ap_cache_cacheable_hdrs_out(r->pool, r->headers_in,
- r->server);
- rv = store_table(dobj->hfd, headers_in);
- if (rv != APR_SUCCESS) {
- return rv;
- }
+ headers_out = apr_table_overlay(r->pool, headers_out,
+ r->err_headers_out);
+ rv = store_table(dobj->hfd, headers_out);
+ if (rv != APR_SUCCESS) {
+ return rv;
}
- apr_file_close(dobj->hfd); /* flush and close */
}
- else {
- /* XXX log message */
+
+ /* Parse the vary header and dump those fields from the headers_in. */
+ /* FIXME: Make call to the same thing cache_select_url calls to crack Vary. */
+ if (r->headers_in) {
+ apr_table_t *headers_in;
+
+ headers_in = ap_cache_cacheable_hdrs_out(r->pool, r->headers_in,
+ r->server);
+ rv = store_table(dobj->hfd, headers_in);
+ if (rv != APR_SUCCESS) {
+ return rv;
+ }
}
+
+ apr_file_close(dobj->hfd); /* flush and close */
ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, r->server,
"disk_cache: Stored headers for URL %s", dobj->name);