From 6be139bcf28ae114909f082eb89f9a61f5f3cd1d Mon Sep 17 00:00:00 2001 From: Ryan Bloom Date: Thu, 7 Mar 2002 02:09:30 +0000 Subject: [PATCH] Remove the prev pointer from the filter chain. This removes the complexity of trying to set the filter chain correctly, with the side-effect of forcing us to walk the entire chain whenever we add a filter. Since the filter chains are small, the decrease in complexity is worth it. Reviewed by: Allan Edwards git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@93745 13f79535-47bb-0310-9956-ffa450edef68 --- include/util_filter.h | 3 --- server/core.c | 2 +- server/protocol.c | 3 --- server/request.c | 2 +- server/util_filter.c | 14 ++------------ 5 files changed, 4 insertions(+), 20 deletions(-) diff --git a/include/util_filter.h b/include/util_filter.h index 60ea804b94..19d845afb9 100644 --- a/include/util_filter.h +++ b/include/util_filter.h @@ -263,9 +263,6 @@ struct ap_filter_t { /** The next filter in the chain */ ap_filter_t *next; - /** The previous filter in the chain */ - ap_filter_t *prev; - /** The request_rec associated with the current filter. If a sub-request * adds filters, then the sub-request is the request associated with the * filter. diff --git a/server/core.c b/server/core.c index 7d95e1f029..3c708d9b1c 100644 --- a/server/core.c +++ b/server/core.c @@ -4040,7 +4040,7 @@ static void register_hooks(apr_pool_t *p) AP_FTYPE_NETWORK); ap_subreq_core_filter_handle = ap_register_output_filter("SUBREQ_CORE", ap_sub_req_output_filter, - AP_FTYPE_HTTP_HEADER); + AP_FTYPE_CONTENT + 5); ap_old_write_func = ap_register_output_filter("OLD_WRITE", ap_old_write_filter, AP_FTYPE_CONTENT - 10); } diff --git a/server/protocol.c b/server/protocol.c index 5a97dc6a96..d7ce8f50d0 100644 --- a/server/protocol.c +++ b/server/protocol.c @@ -777,9 +777,6 @@ request_rec *ap_read_request(conn_rec *conn) r->request_config = ap_create_request_config(r->pool); /* Must be set before we run create request hook */ - conn->output_filters->prev = NULL; - conn->input_filters->prev = NULL; - r->proto_output_filters = conn->output_filters; r->output_filters = r->proto_output_filters; r->proto_input_filters = conn->input_filters; diff --git a/server/request.c b/server/request.c index 0a7e0b55d1..3f022c0707 100644 --- a/server/request.c +++ b/server/request.c @@ -1499,7 +1499,7 @@ static request_rec *make_sub_request(const request_rec *r, rnew->input_filters = r->input_filters; rnew->proto_input_filters = r->proto_input_filters; rnew->output_filters = next_filter; - rnew->proto_output_filters = r->connection->output_filters; + rnew->proto_output_filters = r->proto_output_filters; ap_add_output_filter_handle(ap_subreq_core_filter_handle, NULL, rnew, rnew->connection); } diff --git a/server/util_filter.c b/server/util_filter.c index c818de9051..e0032c986a 100644 --- a/server/util_filter.c +++ b/server/util_filter.c @@ -329,7 +329,7 @@ static ap_filter_t *add_any_filter_handle(ap_filter_rec_t *frec, void *ctx, f->ctx = ctx; f->r = r; f->c = c; - f->next = f->prev = NULL; + f->next = NULL; if (INSERT_BEFORE(f, *outf)) { f->next = *outf; @@ -351,10 +351,6 @@ static ap_filter_t *add_any_filter_handle(ap_filter_rec_t *frec, void *ctx, } if (first && first != (*outf)) { first->next = f; - f->prev = first; - } - if (*outf && ((*outf)->prev == first)) { - (*outf)->prev = f; } } *outf = f; @@ -365,11 +361,7 @@ static ap_filter_t *add_any_filter_handle(ap_filter_rec_t *frec, void *ctx, fscan = fscan->next; f->next = fscan->next; - if (fscan->next->prev == fscan) { - f->prev = fscan; - fscan->next->prev = f; - fscan->next = f; - } + fscan->next = f; } if (frec->ftype < AP_FTYPE_CONNECTION && (*r_filters == *c_filters)) { @@ -472,7 +464,6 @@ static void remove_any_filter(ap_filter_t *f, ap_filter_t **r_filt, ap_filter_t if (*curr == f) { *curr = (*curr)->next; - (*curr)->prev = NULL; return; } @@ -483,7 +474,6 @@ static void remove_any_filter(ap_filter_t *f, ap_filter_t **r_filt, ap_filter_t } fscan->next = f->next; - f->next->prev = fscan; } AP_DECLARE(void) ap_remove_input_filter(ap_filter_t *f) -- 2.40.0