X-Git-Url: https://gerrit.fd.io/r/gitweb?a=blobdiff_plain;f=src%2Fvnet%2Fsession%2Fsession.c;h=bd69f752de4677b803d694e18f33a3d14c34846a;hb=1a8c43778ffbeae4b9084328d07cbc440abb83b2;hp=e9cda361f37b37299e926710375d19f7719ae3d4;hpb=d8f48e2166747b529aa23762ac314dd686590c89;p=vpp.git diff --git a/src/vnet/session/session.c b/src/vnet/session/session.c index e9cda361f37..bd69f752de4 100644 --- a/src/vnet/session/session.c +++ b/src/vnet/session/session.c @@ -130,7 +130,8 @@ session_add_self_custom_tx_evt (transport_connection_t * tc, u8 has_prio) if (!(s->flags & SESSION_F_CUSTOM_TX)) { s->flags |= SESSION_F_CUSTOM_TX; - if (svm_fifo_set_event (s->tx_fifo)) + if (svm_fifo_set_event (s->tx_fifo) + || transport_connection_is_descheduled (tc)) { session_worker_t *wrk; session_evt_elt_t *elt; @@ -141,10 +142,24 @@ session_add_self_custom_tx_evt (transport_connection_t * tc, u8 has_prio) elt = session_evt_alloc_old (wrk); elt->evt.session_index = tc->s_index; elt->evt.event_type = SESSION_IO_EVT_TX; + tc->flags &= ~TRANSPORT_CONNECTION_F_DESCHED; } } } +void +sesssion_reschedule_tx (transport_connection_t * tc) +{ + session_worker_t *wrk = session_main_get_worker (tc->thread_index); + session_evt_elt_t *elt; + + ASSERT (tc->thread_index == vlib_get_thread_index ()); + + elt = session_evt_alloc_new (wrk); + elt->evt.session_index = tc->s_index; + elt->evt.event_type = SESSION_IO_EVT_TX; +} + static void session_program_transport_ctrl_evt (session_t * s, session_evt_type_t evt) { @@ -268,7 +283,7 @@ session_delete (session_t * s) session_free_w_fifos (s); } -static session_t * +session_t * session_alloc_for_connection (transport_connection_t * tc) { session_t *s;