aboutsummaryrefslogtreecommitdiffstats
path: root/src/vnet/session
diff options
context:
space:
mode:
Diffstat (limited to 'src/vnet/session')
-rw-r--r--src/vnet/session/session.c9
-rw-r--r--src/vnet/session/session_lookup.c1
2 files changed, 6 insertions, 4 deletions
diff --git a/src/vnet/session/session.c b/src/vnet/session/session.c
index 67e7ee39001..2ca867c166f 100644
--- a/src/vnet/session/session.c
+++ b/src/vnet/session/session.c
@@ -1659,8 +1659,10 @@ session_transport_close (session_t * s)
{
if (s->session_state == SESSION_STATE_TRANSPORT_CLOSED)
session_set_state (s, SESSION_STATE_CLOSED);
- /* If transport is already deleted, just free the session */
- else if (s->session_state >= SESSION_STATE_TRANSPORT_DELETED)
+ /* If transport is already deleted, just free the session. Half-opens
+ * expected to be already cleaning up at this point */
+ else if (s->session_state >= SESSION_STATE_TRANSPORT_DELETED &&
+ !(s->flags & SESSION_F_HALF_OPEN))
session_program_cleanup (s);
return;
}
@@ -1687,7 +1689,8 @@ session_transport_reset (session_t * s)
{
if (s->session_state == SESSION_STATE_TRANSPORT_CLOSED)
session_set_state (s, SESSION_STATE_CLOSED);
- else if (s->session_state >= SESSION_STATE_TRANSPORT_DELETED)
+ else if (s->session_state >= SESSION_STATE_TRANSPORT_DELETED &&
+ !(s->flags & SESSION_F_HALF_OPEN))
session_program_cleanup (s);
return;
}
diff --git a/src/vnet/session/session_lookup.c b/src/vnet/session/session_lookup.c
index 9d028dbb28c..ff20bc2d835 100644
--- a/src/vnet/session/session_lookup.c
+++ b/src/vnet/session/session_lookup.c
@@ -1184,7 +1184,6 @@ session_lookup_connection_wt6 (u32 fib_index, ip6_address_t * lcl,
rv = clib_bihash_search_inline_48_8 (&st->v6_session_hash, &kv6);
if (rv == 0)
{
- ASSERT ((u32) (kv6.value >> 32) == thread_index);
if (PREDICT_FALSE ((u32) (kv6.value >> 32) != thread_index))
{
*result = SESSION_LOOKUP_RESULT_WRONG_THREAD;