session: postpone close notification if still accepting 96/34596/4
authorFlorin Coras <fcoras@cisco.com>
Sat, 27 Nov 2021 18:45:55 +0000 (10:45 -0800)
committerDave Barach <openvpp@barachs.net>
Mon, 29 Nov 2021 17:49:48 +0000 (17:49 +0000)
Acceping sessions might be rejected so the notification might not make
sense.

Type: improvement

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

src/vnet/session/session.c

index f063548..f4a9e45 100644 (file)
@@ -1099,6 +1099,15 @@ session_transport_closing_notify (transport_connection_t * tc)
   s = session_get (tc->s_index, tc->thread_index);
   if (s->session_state >= SESSION_STATE_TRANSPORT_CLOSING)
     return;
+
+  /* Wait for reply from app before sending notification as the
+   * accept might be rejected */
+  if (s->session_state == SESSION_STATE_ACCEPTING)
+    {
+      s->session_state = SESSION_STATE_TRANSPORT_CLOSING;
+      return;
+    }
+
   s->session_state = SESSION_STATE_TRANSPORT_CLOSING;
   app_wrk = app_worker_get (s->app_wrk_index);
   app_worker_close_notify (app_wrk, s);
@@ -1225,6 +1234,11 @@ session_transport_reset_notify (transport_connection_t * tc)
   svm_fifo_dequeue_drop_all (s->tx_fifo);
   if (s->session_state >= SESSION_STATE_TRANSPORT_CLOSING)
     return;
+  if (s->session_state == SESSION_STATE_ACCEPTING)
+    {
+      s->session_state = SESSION_STATE_TRANSPORT_CLOSING;
+      return;
+    }
   s->session_state = SESSION_STATE_TRANSPORT_CLOSING;
   app_wrk = app_worker_get (s->app_wrk_index);
   app_worker_reset_notify (app_wrk, s);