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
/** 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.
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);
}
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;
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);
}
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;
}
if (first && first != (*outf)) {
first->next = f;
- f->prev = first;
- }
- if (*outf && ((*outf)->prev == first)) {
- (*outf)->prev = f;
}
}
*outf = f;
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)) {
if (*curr == f) {
*curr = (*curr)->next;
- (*curr)->prev = NULL;
return;
}
}
fscan->next = f->next;
- f->next->prev = fscan;
}
AP_DECLARE(void) ap_remove_input_filter(ap_filter_t *f)