ASF Bugzilla – Attachment 19417 Details for
Bug 41362
mod_disk_cache and mod_include conflict generating incorrect pages from cache
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Help
|
New Account
|
Log In
Remember
[x]
|
Forgot Password
Login:
[x]
[patch]
patch against mod_disk_cache.c r470455 that can be used in 2.2.4
mod_disk_cache.c.r470455.patch (text/plain), 6.20 KB, created by
Giuliano Gavazzi
on 2007-01-16 17:07:39 UTC
(
hide
)
Description:
patch against mod_disk_cache.c r470455 that can be used in 2.2.4
Filename:
MIME Type:
Creator:
Giuliano Gavazzi
Created:
2007-01-16 17:07:39 UTC
Size:
6.20 KB
patch
obsolete
>Index: mod_disk_cache.c >=================================================================== >--- mod_disk_cache.c (revision 470455) >+++ mod_disk_cache.c (working copy) >@@ -1457,6 +1457,7 @@ > static apr_status_t store_disk_header(disk_cache_object_t *dobj, > request_rec *r, cache_info *info) > { >+ if ( dobj->initial_size < 0) return APR_SUCCESS; //do not store incorrect size. GG > disk_cache_format_t format = DISK_FORMAT_VERSION; > struct iovec iov[3]; > int niov; >@@ -1472,22 +1473,25 @@ > disk_info.status = info->status; > disk_info.file_size = dobj->initial_size; > >- niov = 0; >- iov[niov].iov_base = (void*)&format; >- iov[niov++].iov_len = sizeof(format); >- iov[niov].iov_base = (void*)&disk_info; >- iov[niov++].iov_len = sizeof(disk_cache_info_t); >+ >+ niov = 0; >+ iov[niov].iov_base = (void*)&format; >+ iov[niov++].iov_len = sizeof(format); >+ iov[niov].iov_base = (void*)&disk_info; >+ iov[niov++].iov_len = sizeof(disk_cache_info_t); > >- disk_info.name_len = strlen(dobj->name); >- iov[niov].iov_base = (void*)dobj->name; >- iov[niov++].iov_len = disk_info.name_len; >+ disk_info.name_len = strlen(dobj->name); >+ iov[niov].iov_base = (void*)dobj->name; >+ iov[niov++].iov_len = disk_info.name_len; > >- rv = apr_file_writev(dobj->hfd, (const struct iovec *) &iov, niov, &amt); >- if (rv != APR_SUCCESS) { >- file_cache_errorcleanup(dobj, r); >- return rv; >- } >+ rv = apr_file_writev(dobj->hfd, (const struct iovec *) &iov, niov, &amt); >+ if (rv != APR_SUCCESS) { >+ file_cache_errorcleanup(dobj, r); >+ return rv; >+ } >+ > >+ > if (r->headers_out) { > apr_table_t *headers_out; > >@@ -1536,7 +1540,6 @@ > int flags=0, rewriting; > disk_cache_object_t *dobj = (disk_cache_object_t*) h->cache_obj->vobj; > >- > /* This is flaky... we need to manage the cache_info differently */ > h->cache_obj->info = *info; > >@@ -1845,64 +1848,73 @@ > > apr_brigade_cleanup(dobj->tmpbb); > >- } > >- >- /* Drop out here if this wasn't the end */ >- if (!APR_BUCKET_IS_EOS(APR_BRIGADE_LAST(bb))) { >- return APR_SUCCESS; >- } >+ // EOS, so we update the headers. GG >+ if (APR_BUCKET_IS_EOS(APR_BRIGADE_LAST(bb))) { >+ >+ ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, r->server, >+ "disk_cache: Done caching URL %s, len %" APR_OFF_T_FMT, >+ dobj->name, dobj->file_size); >+ >+ if (APR_SUCCESS != dobj->frv) { >+ ap_log_error(APLOG_MARK, APLOG_ERR, dobj->frv, r->server, >+ "disk_cache: An error occurred while writing to the " >+ "network for URL %s.", >+ h->cache_obj->key); >+ } > >- ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, r->server, >- "disk_cache: Done caching URL %s, len %" APR_OFF_T_FMT, >- dobj->name, dobj->file_size); >+ if (dobj->file_size < conf->minfs) { >+ ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, r->server, >+ "disk_cache: URL %s failed the size check " >+ "(%" APR_OFF_T_FMT "<%" APR_OFF_T_FMT ")", >+ h->cache_obj->key, dobj->file_size, conf->minfs); >+ /* Remove the intermediate cache file and return filter status */ >+ file_cache_errorcleanup(dobj, r); >+ return dobj->frv; >+ } >+ if (dobj->initial_size < 0) { >+ /* Update header information now that we know the size */ >+ dobj->initial_size = dobj->file_size; >+ dobj->disk_info.file_size = dobj->file_size; //GG added. required? >+ rv = store_headers(h, r, &(h->cache_obj->info)); >+ if (rv != APR_SUCCESS) { >+ file_cache_errorcleanup(dobj, r); >+ return dobj->frv; >+ } >+ } >+ else if (dobj->initial_size != dobj->file_size) { >+ ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, r->server, >+ "disk_cache: URL %s - body size mismatch: suggested %" >+ APR_OFF_T_FMT " bodysize %" APR_OFF_T_FMT ")", >+ dobj->name, dobj->initial_size, dobj->file_size); >+ file_cache_errorcleanup(dobj, r); >+ return dobj->frv; >+ } >+ >+ /* All checks were fine, close output file */ >+ rv = apr_file_close(dobj->fd); >+ dobj->fd = NULL; >+ if (rv != APR_SUCCESS) { >+ ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, r->server, >+ "disk_cache: While trying to close the cache file for " >+ "URL %s, the close failed", dobj->name); >+ file_cache_errorcleanup(dobj, r); >+ return dobj->frv; >+ } >+ >+ return dobj->frv; >+ >+ >+ >+ >+ } > >- if (APR_SUCCESS != dobj->frv) { >- ap_log_error(APLOG_MARK, APLOG_ERR, dobj->frv, r->server, >- "disk_cache: An error occurred while writing to the " >- "network for URL %s.", >- h->cache_obj->key); >- } > >- if (dobj->file_size < conf->minfs) { >- ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, r->server, >- "disk_cache: URL %s failed the size check " >- "(%" APR_OFF_T_FMT "<%" APR_OFF_T_FMT ")", >- h->cache_obj->key, dobj->file_size, conf->minfs); >- /* Remove the intermediate cache file and return filter status */ >- file_cache_errorcleanup(dobj, r); >- return dobj->frv; >- } >- if (dobj->initial_size < 0) { >- /* Update header information now that we know the size */ >- dobj->initial_size = dobj->file_size; >- rv = store_headers(h, r, &(h->cache_obj->info)); >- if (rv != APR_SUCCESS) { >- file_cache_errorcleanup(dobj, r); >- return dobj->frv; >- } >- } >- else if (dobj->initial_size != dobj->file_size) { >- ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, r->server, >- "disk_cache: URL %s - body size mismatch: suggested %" >- APR_OFF_T_FMT " bodysize %" APR_OFF_T_FMT ")", >- dobj->name, dobj->initial_size, dobj->file_size); >- file_cache_errorcleanup(dobj, r); >- return dobj->frv; >- } > >- /* All checks were fine, close output file */ >- rv = apr_file_close(dobj->fd); >- dobj->fd = NULL; >- if (rv != APR_SUCCESS) { >- ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, r->server, >- "disk_cache: While trying to close the cache file for " >- "URL %s, the close failed", dobj->name); >- file_cache_errorcleanup(dobj, r); >- return dobj->frv; > } > >- return dobj->frv; >+ return APR_SUCCESS; >+ > } > >
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Diff
Attachments on
bug 41362
:
19408
|
19409
| 19417 |
19427
|
19429