aboutsummaryrefslogtreecommitdiffstats
path: root/src/vnet/session/session.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/vnet/session/session.c')
-rw-r--r--src/vnet/session/session.c10
1 files changed, 9 insertions, 1 deletions
diff --git a/src/vnet/session/session.c b/src/vnet/session/session.c
index 258a15898b6..ec3c9cbde15 100644
--- a/src/vnet/session/session.c
+++ b/src/vnet/session/session.c
@@ -573,6 +573,11 @@ session_enqueue_notify_inline (session_t * s)
SESSION_EVT (SESSION_EVT_ENQ, s, svm_fifo_max_dequeue_prod (s->rx_fifo));
s->flags &= ~SESSION_F_RX_EVT;
+
+ /* Application didn't confirm accept yet */
+ if (PREDICT_FALSE (s->session_state == SESSION_STATE_ACCEPTING))
+ return 0;
+
if (PREDICT_FALSE (app_worker_lock_and_send_event (app_wrk, s,
SESSION_IO_EVT_RX)))
return -1;
@@ -745,8 +750,11 @@ session_stream_connect_notify_inline (transport_connection_t * tc, u8 is_fail,
if (app_worker_connect_notify (app_wrk, s, opaque))
{
+ session_lookup_del_connection (tc);
+ /* Avoid notifying app about rejected session cleanup */
s = session_get (new_si, new_ti);
- session_free_w_fifos (s);
+ segment_manager_dealloc_fifos (s->rx_fifo, s->tx_fifo);
+ session_free (s);
return -1;
}