diff src/http/v3/ngx_http_v3.c @ 9161:4939fd04737f

HTTP/3: postponed session creation to init() callback. Now the session object is assigned to c->data while ngx_http_connection_t object is referenced by its http_connection field, similar to ngx_http_v2_connection_t and ngx_http_request_t. The change allows to eliminate v3_session field from ngx_http_connection_t. The field was under NGX_HTTP_V3 macro, which was a source of binary compatibility problems when nginx/module is build with/without HTTP/3 support. Postponing is essential since c->data should retain the reference to ngx_http_connection_t object throughout QUIC handshake, because SSL callbacks ngx_http_ssl_servername() and ngx_http_ssl_alpn_select() rely on this.
author Roman Arutyunyan <arut@nginx.com>
date Thu, 14 Sep 2023 14:13:43 +0400
parents f742b1b46901
children
line wrap: on
line diff
--- a/src/http/v3/ngx_http_v3.c
+++ b/src/http/v3/ngx_http_v3.c
@@ -30,6 +30,8 @@ ngx_http_v3_init_session(ngx_connection_
         goto failed;
     }
 
+    h3c->http_connection = hc;
+
     ngx_queue_init(&h3c->blocked);
 
     h3c->keepalive.log = c->log;
@@ -48,7 +50,7 @@ ngx_http_v3_init_session(ngx_connection_
     cln->handler = ngx_http_v3_cleanup_session;
     cln->data = h3c;
 
-    hc->v3_session = h3c;
+    c->data = h3c;
 
     return NGX_OK;