session: half-open free only on main thread 80/32680/4
authorFlorin Coras <fcoras@cisco.com>
Fri, 11 Jun 2021 05:50:26 +0000 (22:50 -0700)
committerDave Barach <openvpp@barachs.net>
Fri, 11 Jun 2021 14:24:39 +0000 (14:24 +0000)
TCP and (D)TLS clean up half-opens on main without a lock/barrier so
cleanup initiated from first worker, e.g., cut-throughs, can corrupt the
session pool.

Type: fix

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

src/vnet/session/session.c

index 56a1fd7..a60735d 100644 (file)
@@ -347,16 +347,15 @@ void
 session_half_open_delete_notify (transport_connection_t *tc)
 {
   /* Notification from ctrl thread accepted without rpc */
-  if (tc->thread_index <= 1)
+  if (!tc->thread_index)
     {
       session_half_open_free (ho_session_get (tc->s_index));
     }
   else
     {
       void *args = uword_to_pointer ((uword) tc->s_index, void *);
-      u32 ctrl_thread = vlib_num_workers () ? 1 : 0;
-      session_send_rpc_evt_to_thread (ctrl_thread, session_half_open_free_rpc,
-                                     args);
+      session_send_rpc_evt_to_thread_force (0, session_half_open_free_rpc,
+                                           args);
     }
 }