diff options
Diffstat (limited to 'src/vnet/session')
-rw-r--r-- | src/vnet/session/session.c | 2 | ||||
-rw-r--r-- | src/vnet/session/session_node.c | 9 |
2 files changed, 7 insertions, 4 deletions
diff --git a/src/vnet/session/session.c b/src/vnet/session/session.c index 2697c26381e..c0163255fb6 100644 --- a/src/vnet/session/session.c +++ b/src/vnet/session/session.c @@ -774,7 +774,7 @@ stream_session_reset_notify (transport_connection_t * tc) stream_session_t *s; application_t *app; s = session_get (tc->s_index, tc->thread_index); - + s->session_state = SESSION_STATE_CLOSED; app = application_get (s->app_index); app->cb_fns.session_reset_callback (s); } diff --git a/src/vnet/session/session_node.c b/src/vnet/session/session_node.c index 46fc4dc8745..e046efba81f 100644 --- a/src/vnet/session/session_node.c +++ b/src/vnet/session/session_node.c @@ -260,6 +260,8 @@ session_tx_not_ready (stream_session_t * s, u8 peek_data) * session is not ready or closed */ if (s->session_state < SESSION_STATE_READY) return 1; + if (s->session_state == SESSION_STATE_CLOSED) + return 2; } return 0; } @@ -364,11 +366,12 @@ session_tx_fifo_read_and_snd_i (vlib_main_t * vm, vlib_node_runtime_t * node, session_tx_context_t *ctx = &smm->ctx[thread_index]; transport_proto_t tp; vlib_buffer_t *pb; - u16 n_bufs; + u16 n_bufs, rv; - if (PREDICT_FALSE (session_tx_not_ready (s, peek_data))) + if (PREDICT_FALSE ((rv = session_tx_not_ready (s, peek_data)))) { - vec_add1 (smm->pending_event_vector[thread_index], *e); + if (rv < 2) + vec_add1 (smm->pending_event_vector[thread_index], *e); return 0; } |