From c0737e962ca913763e4cc3aa516a2dfffe46659e Mon Sep 17 00:00:00 2001 From: Florin Coras Date: Mon, 4 Mar 2019 14:19:39 -0800 Subject: session: use session index instead of fifo for evt Avoids derefrencing fifo pointers whose segments could have been unmapped. Change-Id: Ifb0b7399e424f145f3f94b769391a6f4e31bb4e6 Signed-off-by: Florin Coras --- src/tests/vnet/session/tcp_echo.c | 49 ++------------------------------------- src/tests/vnet/session/udp_echo.c | 5 ++-- 2 files changed, 5 insertions(+), 49 deletions(-) (limited to 'src/tests/vnet/session') diff --git a/src/tests/vnet/session/tcp_echo.c b/src/tests/vnet/session/tcp_echo.c index 435a414d097..3531a5307a5 100644 --- a/src/tests/vnet/session/tcp_echo.c +++ b/src/tests/vnet/session/tcp_echo.c @@ -532,15 +532,6 @@ recv_data_chunk (echo_main_t * em, echo_session_t * s, u8 * rx_buf) while (n_to_read > 0); } -void -client_handle_rx (echo_main_t * em, session_event_t * e, u8 * rx_buf) -{ - echo_session_t *s; - - s = pool_elt_at_index (em->sessions, e->fifo->client_session_index); - recv_data_chunk (em, s, rx_buf); -} - static void send_data_chunk (echo_main_t * em, echo_session_t * s) { @@ -596,42 +587,6 @@ client_thread_fn (void *arg) pthread_exit (0); } -/* - * Rx thread that handles all connections. - * - * Not used. - */ -void * -client_rx_thread_fn (void *arg) -{ - session_event_t _e, *e = &_e; - echo_main_t *em = &echo_main; - static u8 *rx_buf = 0; - svm_msg_q_msg_t msg; - - vec_validate (rx_buf, 1 << 20); - - while (!em->time_to_stop && em->state != STATE_READY) - ; - - while (!em->time_to_stop) - { - svm_msg_q_sub (em->our_event_queue, &msg, SVM_Q_WAIT, 0); - e = svm_msg_q_msg_data (em->our_event_queue, &msg); - switch (e->event_type) - { - case FIFO_EVENT_APP_RX: - client_handle_rx (em, e, rx_buf); - break; - default: - clib_warning ("unknown event type %d", e->event_type); - break; - } - svm_msg_q_free_msg (em->our_event_queue, &msg); - } - pthread_exit (0); -} - void client_send_connect (echo_main_t * em) { @@ -1101,7 +1056,7 @@ server_handle_rx (echo_main_t * em, session_event_t * e) u32 offset, to_dequeue; echo_session_t *s; - s = pool_elt_at_index (em->sessions, e->fifo->client_session_index); + s = pool_elt_at_index (em->sessions, e->session_index); /* Clear event only once. Otherwise, if we do it in the loop by calling * app_recv_stream, we may end up with a lot of unhandled rx events on the @@ -1161,7 +1116,7 @@ server_handle_mq (echo_main_t * em) e = svm_msg_q_msg_data (em->our_event_queue, &msg); switch (e->event_type) { - case FIFO_EVENT_APP_RX: + case SESSION_IO_EVT_RX: server_handle_rx (em, e); break; default: diff --git a/src/tests/vnet/session/udp_echo.c b/src/tests/vnet/session/udp_echo.c index 9fda73d1307..4fd6c8635a8 100644 --- a/src/tests/vnet/session/udp_echo.c +++ b/src/tests/vnet/session/udp_echo.c @@ -1014,7 +1014,8 @@ server_handle_fifo_event_rx (udp_echo_main_t * utm, u32 session_index) /* If event wasn't set, add one */ if (svm_fifo_set_event (tx_fifo)) - app_send_io_evt_to_vpp (session->vpp_evt_q, tx_fifo, + app_send_io_evt_to_vpp (session->vpp_evt_q, + tx_fifo->master_session_index, SESSION_IO_EVT_TX, SVM_Q_WAIT); } } @@ -1043,7 +1044,7 @@ server_handle_event_queue (udp_echo_main_t * utm) switch (e->event_type) { case SESSION_IO_EVT_RX: - server_handle_fifo_event_rx (utm, e->fifo->client_session_index); + server_handle_fifo_event_rx (utm, e->session_index); break; default: -- cgit 1.2.3-korg