aboutsummaryrefslogtreecommitdiffstats
path: root/src/vnet/session
diff options
context:
space:
mode:
authorFlorin Coras <fcoras@cisco.com>2018-12-17 23:08:14 -0800
committerDamjan Marion <dmarion@me.com>2018-12-19 08:33:35 +0000
commite2ea193171f4701aa575379da0e1bac16a85aa33 (patch)
tree29aa3ac276e8e4527f3147b029acb226dd40ba72 /src/vnet/session
parent6fbef2322870bbe1768537caecc3ca06bfd70dd7 (diff)
session: handle close before app accept reply
Change-Id: Ic35bbf55851087d70bfacc1eab4dea4285f98c86 Signed-off-by: Florin Coras <fcoras@cisco.com>
Diffstat (limited to 'src/vnet/session')
-rw-r--r--src/vnet/session/session.c3
-rwxr-xr-xsrc/vnet/session/session_api.c1
-rw-r--r--src/vnet/session/session_node.c8
3 files changed, 5 insertions, 7 deletions
diff --git a/src/vnet/session/session.c b/src/vnet/session/session.c
index a03b53dd3bd..b48459d5081 100644
--- a/src/vnet/session/session.c
+++ b/src/vnet/session/session.c
@@ -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;
}
}
diff --git a/src/vnet/session/session_api.c b/src/vnet/session/session_api.c
index 40fc41629d4..2d20d5f697b 100755
--- a/src/vnet/session/session_api.c
+++ b/src/vnet/session/session_api.c
@@ -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;
diff --git a/src/vnet/session/session_node.c b/src/vnet/session/session_node.c
index eb9026c6457..58d31ccb87c 100644
--- a/src/vnet/session/session_node.c
+++ b/src/vnet/session/session_node.c
@@ -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)
{