mirror of
https://github.com/apache/httpd.git
synced 2025-08-08 15:02:10 +03:00
mod_ssl: release coalesced data when called from ap_filter_output_pending().
The purpose of ap_filter_output_pending() is to flush pending data, so ssl_io_filter_coalesce() should honor that. This allows mod_proxy to not care about mod_ssl coalescing filters when tunneling between connections. git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@1879416 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
@@ -4327,12 +4327,6 @@ PROXY_DECLARE(apr_status_t) ap_proxy_tunnel_create(proxy_tunnel_rec **ptunnel,
|
||||
apr_socket_opt_set(tunnel->client->pfd->desc.s, APR_SO_NONBLOCK, 1);
|
||||
apr_socket_opt_set(tunnel->origin->pfd->desc.s, APR_SO_NONBLOCK, 1);
|
||||
|
||||
/* No coalescing filters */
|
||||
ap_remove_output_filter_byhandle(c_i->output_filters,
|
||||
"SSL/TLS Coalescing Filter");
|
||||
ap_remove_output_filter_byhandle(c_o->output_filters,
|
||||
"SSL/TLS Coalescing Filter");
|
||||
|
||||
/* Bidirectional non-HTTP stream will confuse mod_reqtimeoout */
|
||||
ap_remove_input_filter_byhandle(c_i->input_filters, "reqtimeout");
|
||||
|
||||
|
@@ -1715,6 +1715,20 @@ static apr_status_t ssl_io_filter_coalesce(ap_filter_t *f,
|
||||
apr_size_t buffered = ctx ? ctx->bytes : 0; /* space used on entry */
|
||||
unsigned count = 0;
|
||||
|
||||
/* Pass down everything if called from ap_filter_output_pending() */
|
||||
if (APR_BRIGADE_EMPTY(bb)) {
|
||||
if (!ctx || !ctx->bytes) {
|
||||
return APR_SUCCESS;
|
||||
}
|
||||
|
||||
e = apr_bucket_transient_create(ctx->buffer, ctx->bytes,
|
||||
bb->bucket_alloc);
|
||||
APR_BRIGADE_INSERT_TAIL(bb, e);
|
||||
ctx->bytes = 0; /* buffer now emptied. */
|
||||
|
||||
return ap_pass_brigade(f->next, bb);
|
||||
}
|
||||
|
||||
/* The brigade consists of zero-or-more small data buckets which
|
||||
* can be coalesced (referred to as the "prefix"), followed by the
|
||||
* remainder of the brigade.
|
||||
|
Reference in New Issue
Block a user