X-Git-Url: https://gerrit.fd.io/r/gitweb?a=blobdiff_plain;f=src%2Fvnet%2Fsession%2Fapplication.c;h=fad3e1c2292d1e313c6cff372f7a5471c93ff078;hb=326b81e30e63a8296df51d85e6514356cd737225;hp=b58e73eb4f8969f3991d743fc827b549f2a4902b;hpb=2179513b71963a0b42ca6f1f2b641e79ce89447b;p=vpp.git diff --git a/src/vnet/session/application.c b/src/vnet/session/application.c index b58e73eb4f8..fad3e1c2292 100644 --- a/src/vnet/session/application.c +++ b/src/vnet/session/application.c @@ -557,13 +557,12 @@ app_worker_free (app_worker_t * app_wrk) && app_wrk->first_segment_manager != app_wrk->connects_seg_manager) { sm = segment_manager_get (app_wrk->first_segment_manager); + sm->first_is_protected = 0; + sm->app_wrk_index = SEGMENT_MANAGER_INVALID_APP_INDEX; /* .. and has no fifos, e.g. it might be used for redirected sessions, * remove it */ if (!segment_manager_has_fifos (sm)) - { - sm->app_wrk_index = SEGMENT_MANAGER_INVALID_APP_INDEX; - segment_manager_del (sm); - } + segment_manager_del (sm); } /* @@ -873,10 +872,10 @@ app_worker_get_connect_segment_manager (app_worker_t * app) segment_manager_t * app_worker_get_listen_segment_manager (app_worker_t * app, - stream_session_t * s) + stream_session_t * listener) { uword *smp; - smp = hash_get (app->listeners_table, listen_session_get_handle (s)); + smp = hash_get (app->listeners_table, listen_session_get_handle (listener)); ASSERT (smp != 0); return segment_manager_get (*smp); } @@ -1267,9 +1266,10 @@ app_send_io_evt_rx (app_worker_t * app_wrk, stream_session_t * s, u8 lock) evt->fifo = s->server_rx_fifo; evt->event_type = FIFO_EVENT_APP_RX; + (void) svm_fifo_set_event (s->server_rx_fifo); + if (app_enqueue_evt (mq, &msg, lock)) return -1; - (void) svm_fifo_set_event (s->server_rx_fifo); return 0; } @@ -1626,10 +1626,8 @@ application_local_session_connect (app_worker_t * client_wrk, segment_manager_segment_reader_unlock (sm); goto failed; } - ls->server_rx_fifo->master_session_index = ls->session_index; - ls->server_tx_fifo->master_session_index = ls->session_index; - ls->server_rx_fifo->master_thread_index = ~0; - ls->server_tx_fifo->master_thread_index = ~0; + ls->server_rx_fifo->ct_session_index = ls->session_index; + ls->server_tx_fifo->ct_session_index = ls->session_index; ls->svm_segment_index = seg_index; ls->listener_index = ll->session_index; ls->client_wrk_index = client_wrk->wrk_index; @@ -1721,21 +1719,28 @@ application_local_session_cleanup (app_worker_t * client_wrk, local_session_t * ls) { svm_fifo_segment_private_t *seg; + stream_session_t *listener; segment_manager_t *sm; uword client_key; u8 has_transport; - has_transport = session_has_transport ((stream_session_t *) ls); - client_key = application_client_local_connect_key (ls); + /* Retrieve listener transport type as it is the one that decides where + * the fifos are allocated */ + has_transport = application_local_session_listener_has_transport (ls); if (!has_transport) sm = application_get_local_segment_manager_w_session (server_wrk, ls); else - sm = app_worker_get_listen_segment_manager (server_wrk, - (stream_session_t *) ls); + { + listener = listen_session_get (ls->listener_index); + sm = app_worker_get_listen_segment_manager (server_wrk, listener); + } seg = segment_manager_get_segment (sm, ls->svm_segment_index); if (client_wrk) - hash_unset (client_wrk->local_connects, client_key); + { + client_key = application_client_local_connect_key (ls); + hash_unset (client_wrk->local_connects, client_key); + } if (!has_transport) {