You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@httpd.apache.org by ic...@apache.org on 2022/09/21 11:23:24 UTC
svn commit: r1904189 - in /httpd/httpd/trunk/modules/http2: h2_bucket_beam.c h2_bucket_beam.h
Author: icing
Date: Wed Sep 21 11:23:24 2022
New Revision: 1904189
URL: http://svn.apache.org/viewvc?rev=1904189&view=rev
Log:
*) mod_http2: removing bucket splitting into an extra recv brigade.
buckets are always received as a whole now, even if the total size
exceeds the receivers specified length. This simplifies the internal
handling and, since these buckets already exist, lead to less memory
consumption overall.
Modified:
httpd/httpd/trunk/modules/http2/h2_bucket_beam.c
httpd/httpd/trunk/modules/http2/h2_bucket_beam.h
Modified: httpd/httpd/trunk/modules/http2/h2_bucket_beam.c
URL: http://svn.apache.org/viewvc/httpd/httpd/trunk/modules/http2/h2_bucket_beam.c?rev=1904189&r1=1904188&r2=1904189&view=diff
==============================================================================
--- httpd/httpd/trunk/modules/http2/h2_bucket_beam.c (original)
+++ httpd/httpd/trunk/modules/http2/h2_bucket_beam.c Wed Sep 21 11:23:24 2022
@@ -170,8 +170,7 @@ static apr_size_t calc_space_left(h2_buc
static int buffer_is_empty(h2_bucket_beam *beam)
{
- return ((!beam->recv_buffer || APR_BRIGADE_EMPTY(beam->recv_buffer))
- && H2_BLIST_EMPTY(&beam->buckets_to_send));
+ return H2_BLIST_EMPTY(&beam->buckets_to_send);
}
static apr_status_t wait_not_empty(h2_bucket_beam *beam, conn_rec *c, apr_read_type_e block)
@@ -236,31 +235,6 @@ static void h2_blist_cleanup(h2_blist *b
}
}
-static void recv_buffer_cleanup(h2_bucket_beam *beam)
-{
- apr_bucket_brigade *bb = beam->recv_buffer;
-
- beam->recv_buffer = NULL;
-
- if (bb && !APR_BRIGADE_EMPTY(bb)) {
- apr_off_t bblen = 0;
-
- apr_brigade_length(bb, 0, &bblen);
- beam->recv_bytes += bblen;
-
- /* need to do this unlocked since bucket destroy might
- * call this beam again. */
- apr_thread_mutex_unlock(beam->lock);
- apr_brigade_destroy(bb);
- apr_thread_mutex_lock(beam->lock);
-
- apr_thread_cond_broadcast(beam->change);
- if (beam->recv_cb) {
- beam->recv_cb(beam->recv_ctx, beam);
- }
- }
-}
-
static void beam_shutdown(h2_bucket_beam *beam, apr_shutdown_how_e how)
{
if (!beam->pool) {
@@ -274,12 +248,6 @@ static void beam_shutdown(h2_bucket_beam
beam->recv_cb = NULL;
}
- /* shutdown receiver (or both)? */
- if (how != APR_SHUTDOWN_WRITE) {
- recv_buffer_cleanup(beam);
- beam->recv_cb = NULL;
- }
-
/* shutdown sender (or both)? */
if (how != APR_SHUTDOWN_READ) {
h2_blist_cleanup(&beam->buckets_to_send);
@@ -603,21 +571,6 @@ transfer:
ap_assert(beam->pool);
- /* transfer enough buckets from our receiver brigade, if we have one */
- while (remain >= 0
- && beam->recv_buffer
- && !APR_BRIGADE_EMPTY(beam->recv_buffer)) {
-
- brecv = APR_BRIGADE_FIRST(beam->recv_buffer);
- if (brecv->length > 0 && remain <= 0) {
- break;
- }
- APR_BUCKET_REMOVE(brecv);
- APR_BRIGADE_INSERT_TAIL(bb, brecv);
- remain -= brecv->length;
- ++transferred;
- }
-
/* transfer from our sender brigade, transforming sender buckets to
* receiver ones until we have enough */
while (remain >= 0 && !H2_BLIST_EMPTY(&beam->buckets_to_send)) {
@@ -713,24 +666,6 @@ transfer:
++consumed_buckets;
}
- if (remain < 0) {
- /* too much, put some back into out recv_buffer */
- remain = readbytes;
- for (brecv = APR_BRIGADE_FIRST(bb);
- brecv != APR_BRIGADE_SENTINEL(bb);
- brecv = APR_BUCKET_NEXT(brecv)) {
- remain -= (beam->tx_mem_limits? bucket_mem_used(brecv)
- : (apr_off_t)brecv->length);
- if (remain < 0) {
- apr_bucket_split(brecv, (apr_size_t)((apr_off_t)brecv->length+remain));
- beam->recv_buffer = apr_brigade_split_ex(bb,
- APR_BUCKET_NEXT(brecv),
- beam->recv_buffer);
- break;
- }
- }
- }
-
if (beam->recv_cb && consumed_buckets > 0) {
beam->recv_cb(beam->recv_ctx, beam);
}
@@ -834,8 +769,7 @@ apr_off_t h2_beam_get_mem_used(h2_bucket
static int is_empty(h2_bucket_beam *beam)
{
- return (H2_BLIST_EMPTY(&beam->buckets_to_send)
- && (!beam->recv_buffer || APR_BRIGADE_EMPTY(beam->recv_buffer)));
+ return H2_BLIST_EMPTY(&beam->buckets_to_send);
}
int h2_beam_empty(h2_bucket_beam *beam)
Modified: httpd/httpd/trunk/modules/http2/h2_bucket_beam.h
URL: http://svn.apache.org/viewvc/httpd/httpd/trunk/modules/http2/h2_bucket_beam.h?rev=1904189&r1=1904188&r2=1904189&view=diff
==============================================================================
--- httpd/httpd/trunk/modules/http2/h2_bucket_beam.h (original)
+++ httpd/httpd/trunk/modules/http2/h2_bucket_beam.h Wed Sep 21 11:23:24 2022
@@ -48,9 +48,7 @@ struct h2_bucket_beam {
apr_pool_t *pool;
h2_blist buckets_to_send;
h2_blist buckets_consumed;
- apr_bucket_brigade *recv_buffer;
- apr_pool_t *recv_pool;
-
+
apr_size_t max_buf_size;
apr_interval_time_t timeout;