]> git.kaiwu.me - nginx.git/commitdiff
QUIC: do not reallocate c->sockaddr.
authorRoman Arutyunyan <arut@nginx.com>
Thu, 11 Mar 2021 12:22:18 +0000 (15:22 +0300)
committerRoman Arutyunyan <arut@nginx.com>
Thu, 11 Mar 2021 12:22:18 +0000 (15:22 +0300)
When a connection is created, enough memory is allocated to accomodate
any future address change.

src/event/ngx_event_udp.c

index 884b1cd51aafca856430edf2b13310fb93a0fa4a..a15e31f41b11ae0ca258aee64610bce5ff791914 100644 (file)
@@ -24,6 +24,7 @@ static ngx_connection_t *ngx_lookup_udp_connection(ngx_listening_t *ls,
 void
 ngx_event_recvmsg(ngx_event_t *ev)
 {
+    size_t             len;
     ssize_t            n;
     ngx_str_t          key;
     ngx_buf_t          buf;
@@ -302,7 +303,15 @@ ngx_event_recvmsg(ngx_event_t *ev)
             return;
         }
 
-        c->sockaddr = ngx_palloc(c->pool, socklen);
+        len = socklen;
+
+#if (NGX_QUIC)
+        if (ls->quic) {
+            len = NGX_SOCKADDRLEN;
+        }
+#endif
+
+        c->sockaddr = ngx_palloc(c->pool, len);
         if (c->sockaddr == NULL) {
             ngx_close_accepted_udp_connection(c);
             return;
@@ -704,13 +713,6 @@ ngx_lookup_udp_connection(ngx_listening_t *ls, ngx_str_t *key,
                     }
 #endif
 
-                    if (c->socklen < socklen) {
-                        c->sockaddr = ngx_palloc(c->pool, socklen);
-                        if (c->sockaddr == NULL) {
-                            return c;
-                        }
-                    }
-
                     ngx_memcpy(c->sockaddr, sockaddr, socklen);
                     c->socklen = socklen;
                 }