session: cleanup lcl endpt freelist before all alloc 73/38473/3
authorFlorin Coras <fcoras@cisco.com>
Mon, 13 Mar 2023 23:31:52 +0000 (16:31 -0700)
committerDave Wallace <dwallacelf@gmail.com>
Tue, 14 Mar 2023 16:09:50 +0000 (16:09 +0000)
Make sure endpoint freelist is drained before alloc of fixed local
source port is tried.

Type: fix

Signed-off-by: Florin Coras <fcoras@cisco.com>
Change-Id: I302deee5609a463af8135185af71722ac8c55a27

src/vnet/session/transport.c

index 0020d74..8b3dacf 100644 (file)
@@ -578,10 +578,6 @@ transport_alloc_local_port (u8 proto, ip46_address_t *lcl_addr,
   /* Only support active opens from one of ctrl threads */
   ASSERT (vlib_get_thread_index () <= transport_cl_thread ());
 
-  /* Cleanup freelist if need be */
-  if (vec_len (tm->lcl_endpts_freelist))
-    transport_cleanup_freelist ();
-
   /* Search for first free slot */
   for (tries = 0; tries < limit; tries++)
     {
@@ -669,6 +665,7 @@ transport_alloc_local_endpoint (u8 proto, transport_endpoint_cfg_t * rmt_cfg,
                                ip46_address_t * lcl_addr, u16 * lcl_port)
 {
   transport_endpoint_t *rmt = (transport_endpoint_t *) rmt_cfg;
+  transport_main_t *tm = &tp_main;
   session_error_t error;
   int port;
 
@@ -689,6 +686,10 @@ transport_alloc_local_endpoint (u8 proto, transport_endpoint_cfg_t * rmt_cfg,
                        sizeof (rmt_cfg->peer.ip));
     }
 
+  /* Cleanup freelist if need be */
+  if (vec_len (tm->lcl_endpts_freelist))
+    transport_cleanup_freelist ();
+
   /*
    * Allocate source port
    */