summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBrian Pane <brianp@apache.org>2005-10-09 08:15:40 +0000
committerBrian Pane <brianp@apache.org>2005-10-09 08:15:40 +0000
commit42bf8b16c9ad23672aa7b23cee48b22c9493541e (patch)
treefa200190e293ad91e78e8bb335cbe96ab684e836
parent41f09ddf073d53174992865edbe52fa94dbe8c59 (diff)
downloadhttpd-42bf8b16c9ad23672aa7b23cee48b22c9493541e.tar.gz
Refactored CONN_STATE_WRITE_COMPLETION handling.
git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/branches/async-dev@307380 13f79535-47bb-0310-9956-ffa450edef68
-rw-r--r--server/mpm/experimental/event/event.c16
1 files changed, 14 insertions, 2 deletions
diff --git a/server/mpm/experimental/event/event.c b/server/mpm/experimental/event/event.c
index 6bee16cb07..fb73e20d2a 100644
--- a/server/mpm/experimental/event/event.c
+++ b/server/mpm/experimental/event/event.c
@@ -644,9 +644,21 @@ static int process_socket(apr_pool_t * p, apr_socket_t * sock,
*/
apr_bucket_brigade *bb = apr_brigade_create(c->pool, c->bucket_alloc);
apr_bucket *b = apr_bucket_flush_create(c->bucket_alloc);
+ ap_filter_t *output_filter = c->output_filters;
+ apr_status_t rv;
APR_BRIGADE_INSERT_HEAD(bb, b);
- ap_pass_brigade(c->output_filters, bb);
- if (c->keepalive != AP_CONN_KEEPALIVE || c->aborted ||
+ while (output_filter->next != NULL) {
+ output_filter = output_filter->next;
+ }
+ rv = output_filter->frec->filter_func.out_func(output_filter, bb);
+ if (rv != APR_SUCCESS) {
+ /* XXX log error */
+ cs->state = CONN_STATE_LINGER;
+ }
+ else if (c->data_in_output_filters) {
+ cs->state = CONN_STATE_WRITE_COMPLETION;
+ }
+ else if (c->keepalive != AP_CONN_KEEPALIVE || c->aborted ||
ap_graceful_stop_signalled()) {
c->cs->state = CONN_STATE_LINGER;
}