changeset 8775:6e2c23481abb quic

HTTP/3: clean up table from session cleanup handler. Previously table had a separate cleanup handler.
author Roman Arutyunyan <arut@nginx.com>
date Wed, 28 Apr 2021 11:30:27 +0300
parents f4d3f5d93a82
children 901126931bd5
files src/http/v3/ngx_http_v3.c src/http/v3/ngx_http_v3_tables.c src/http/v3/ngx_http_v3_tables.h
diffstat 3 files changed, 13 insertions(+), 19 deletions(-) [+]
line wrap: on
line diff
--- a/src/http/v3/ngx_http_v3.c
+++ b/src/http/v3/ngx_http_v3.c
@@ -79,6 +79,8 @@ ngx_http_v3_cleanup_session(void *data)
 {
     ngx_http_v3_session_t  *h3c = data;
 
+    ngx_http_v3_cleanup_table(h3c);
+
     if (h3c->keepalive.timer_set) {
         ngx_del_timer(&h3c->keepalive);
     }
--- a/src/http/v3/ngx_http_v3_tables.c
+++ b/src/http/v3/ngx_http_v3_tables.c
@@ -14,7 +14,6 @@
 
 
 static ngx_int_t ngx_http_v3_evict(ngx_connection_t *c, size_t need);
-static void ngx_http_v3_cleanup_table(void *data);
 static void ngx_http_v3_unblock(void *data);
 static ngx_int_t ngx_http_v3_new_header(ngx_connection_t *c);
 
@@ -240,8 +239,6 @@ ngx_int_t
 ngx_http_v3_set_capacity(ngx_connection_t *c, ngx_uint_t capacity)
 {
     ngx_uint_t                     max, prev_max;
-    ngx_connection_t              *pc;
-    ngx_pool_cleanup_t            *cln;
     ngx_http_v3_header_t         **elts;
     ngx_http_v3_session_t         *h3c;
     ngx_http_v3_srv_conf_t        *h3scf;
@@ -276,18 +273,7 @@ ngx_http_v3_set_capacity(ngx_connection_
             return NGX_ERROR;
         }
 
-        if (dt->elts == NULL) {
-            pc = c->quic->parent;
-
-            cln = ngx_pool_cleanup_add(pc->pool, 0);
-            if (cln == NULL) {
-                return NGX_ERROR;
-            }
-
-            cln->handler = ngx_http_v3_cleanup_table;
-            cln->data = dt;
-
-        } else {
+        if (dt->elts) {
             ngx_memcpy(elts, dt->elts, dt->nelts * sizeof(void *));
             ngx_free(dt->elts);
         }
@@ -301,12 +287,17 @@ ngx_http_v3_set_capacity(ngx_connection_
 }
 
 
-static void
-ngx_http_v3_cleanup_table(void *data)
+void
+ngx_http_v3_cleanup_table(ngx_http_v3_session_t *h3c)
 {
-    ngx_http_v3_dynamic_table_t  *dt = data;
+    ngx_uint_t                    n;
+    ngx_http_v3_dynamic_table_t  *dt;
 
-    ngx_uint_t  n;
+    dt = &h3c->table;
+
+    if (dt->elts == NULL) {
+        return;
+    }
 
     for (n = 0; n < dt->nelts; n++) {
         ngx_free(dt->elts[n]);
--- a/src/http/v3/ngx_http_v3_tables.h
+++ b/src/http/v3/ngx_http_v3_tables.h
@@ -29,6 +29,7 @@ typedef struct {
 } ngx_http_v3_dynamic_table_t;
 
 
+void ngx_http_v3_cleanup_table(ngx_http_v3_session_t *h3c);
 ngx_int_t ngx_http_v3_ref_insert(ngx_connection_t *c, ngx_uint_t dynamic,
     ngx_uint_t index, ngx_str_t *value);
 ngx_int_t ngx_http_v3_insert(ngx_connection_t *c, ngx_str_t *name,