]> git.kaiwu.me - nginx.git/commitdiff
HTTP/3: clean up table from session cleanup handler.
authorRoman Arutyunyan <arut@nginx.com>
Wed, 28 Apr 2021 08:30:27 +0000 (11:30 +0300)
committerRoman Arutyunyan <arut@nginx.com>
Wed, 28 Apr 2021 08:30:27 +0000 (11:30 +0300)
Previously table had a separate cleanup handler.

src/http/v3/ngx_http_v3.c
src/http/v3/ngx_http_v3_tables.c
src/http/v3/ngx_http_v3_tables.h

index 461388bae2a2eb17d7f9b7be5bc8a18f1d577215..a1638c504a701449604c59122b3470647e4129d1 100644 (file)
@@ -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);
     }
index f83236c01042e55f72194bc12a6326ffaf48b1c3..e07332c96f2fbde0a52f8542495534646fd8987c 100644 (file)
@@ -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_t *c, ngx_uint_t capacity)
             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_t *c, ngx_uint_t capacity)
 }
 
 
-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;
+
+    dt = &h3c->table;
 
-    ngx_uint_t  n;
+    if (dt->elts == NULL) {
+        return;
+    }
 
     for (n = 0; n < dt->nelts; n++) {
         ngx_free(dt->elts[n]);
index 6cf2475413ae57e7f394f9ec8432ef38a6512b77..36589f171fe842047acc59e2d1c4bc6e1a5f1cb6 100644 (file)
@@ -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,