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;