session: handle close before app accept reply 21/16521/3
authorFlorin Coras <fcoras@cisco.com>
Tue, 18 Dec 2018 07:08:14 +0000 (23:08 -0800)
committerDamjan Marion <dmarion@me.com>
Wed, 19 Dec 2018 08:33:35 +0000 (08:33 +0000)
Change-Id: Ic35bbf55851087d70bfacc1eab4dea4285f98c86
Signed-off-by: Florin Coras <fcoras@cisco.com>
src/vnet/session/session.c
src/vnet/session/session_api.c
src/vnet/session/session_node.c

index a03b53d..b48459d 100644 (file)
@@ -822,8 +822,7 @@ stream_session_delete_notify (transport_connection_t * tc)
       stream_session_delete (s);
       break;
     default:
-      /* Assume connection was not yet added the lookup table */
-      session_free_w_fifos (s);
+      stream_session_delete (s);
       break;
     }
 }
index 40fc416..2d20d5f 100755 (executable)
@@ -408,6 +408,7 @@ mq_try_lock_and_alloc_msg (svm_msg_q_t * app_mq, svm_msg_q_msg_t * msg)
       if (!rv)
        return 0;
       try++;
+      usleep (1);
     }
   clib_warning ("failed to alloc msg");
   return -1;
index eb9026c..58d31cc 100644 (file)
@@ -64,11 +64,9 @@ session_mq_accepted_reply_handler (void *data)
   else
     {
       s = session_get_from_handle_if_valid (mp->handle);
-      if (!s)
-       {
-         clib_warning ("session 0x%llx doesn't exist", mp->handle);
-         return;
-       }
+      /* Closed while waiting for app to reply */
+      if (!s || s->session_state > SESSION_STATE_READY)
+       return;
       app_wrk = app_worker_get (s->app_wrk_index);
       if (app_wrk->app_index != mp->context)
        {