Some discussion has taken place in bugzilla but more discussion and
opinions are needed.
A patch recently posted:
Index: server/core.c
===================================================================
--- server/core.c (revision 386843)
+++ server/core.c (working copy)
@@ -3645,7 +3645,16 @@
e = apr_bucket_eos_create(c->bucket_alloc);
APR_BRIGADE_INSERT_TAIL(bb, e);
- return ap_pass_brigade(r->output_filters, bb);
+ status = ap_pass_brigade(r->output_filters, bb);
+ if (status == APR_SUCCESS
+ || r->status != HTTP_OK
+ || c->aborted) {
+ return r->status;
+ }
+ else {
+ /* no way to know what type of error occurred */
+ return HTTP_INTERNAL_SERVER_ERROR;
+ }
}
else { /* unusual method (not GET or POST) */
if (r->method_number == M_INVALID) {
Some concerns about the else path:
a) is 500 proper? should it just return OK instead?
b) what about logging that path to ensure that the administrator has
some help diagnosing the problem, since we can't carry the
apr_status_t any further than here?
There are concerns of too much logging (filter has already logged
something) or too little logging (filter didn't log anything). The
access log won't have any strong hints that something bad happened
since r->status didn't get changed and c->aborted didn't get set.
Thoughts?