]> git.kaiwu.me - nginx.git/commitdiff
QUIC: fixed removal of unused client IDs.
authorVladimir Homutov <vl@nginx.com>
Wed, 13 Oct 2021 11:48:33 +0000 (14:48 +0300)
committerVladimir Homutov <vl@nginx.com>
Wed, 13 Oct 2021 11:48:33 +0000 (14:48 +0300)
If client ID was never used, its refcount is zero.  To keep things simple,
the ngx_quic_unref_client_id() function is now aware of such IDs.

If client ID was used, the ngx_quic_replace_retired_client_id() function
is supposed to find all users and unref the ID, thus ngx_quic_unref_client_id()
should not be called after it.

src/event/quic/ngx_event_quic_connid.c

index 273b58c65c573915dbf9d2c091e110dc5e0b8911..2ad65077a019fcef9e9a44f629ad7118bef3b884 100644 (file)
@@ -183,9 +183,10 @@ retire:
             if (ngx_quic_replace_retired_client_id(c, cid) != NGX_OK) {
                 return NGX_ERROR;
             }
-        }
 
-        ngx_quic_unref_client_id(c, cid);
+        } else {
+            ngx_quic_unref_client_id(c, cid);
+        }
     }
 
 done:
@@ -534,7 +535,9 @@ ngx_quic_unref_client_id(ngx_connection_t *c, ngx_quic_client_id_t *cid)
 {
     ngx_quic_connection_t  *qc;
 
-    cid->refcnt--;
+    if (cid->refcnt) {
+        cid->refcnt--;
+    } /* else: unused client id */
 
     if (cid->refcnt) {
         return;