From 537b17ef954b68d09b6f559dc05672cf7acfbe7c Mon Sep 17 00:00:00 2001 From: Florin Coras Date: Fri, 28 Sep 2018 10:35:45 -0700 Subject: [PATCH] session: lock msg queues while generating control events Change-Id: I229ce9c306a97956c87ccb8f7a1c5c9dac94ab31 Signed-off-by: Florin Coras --- src/vnet/session/session_api.c | 18 ++++++------------ src/vnet/tcp/tcp_debug.h | 5 ++++- 2 files changed, 10 insertions(+), 13 deletions(-) diff --git a/src/vnet/session/session_api.c b/src/vnet/session/session_api.c index b88438c267f..fc63428277e 100755 --- a/src/vnet/session/session_api.c +++ b/src/vnet/session/session_api.c @@ -293,14 +293,13 @@ mq_send_local_session_disconnected_cb (u32 app_wrk_index, app_mq = app_wrk->event_queue; svm_msg_q_lock_and_alloc_msg_w_ring (app_mq, SESSION_MQ_CTRL_EVT_RING, SVM_Q_WAIT, msg); - svm_msg_q_unlock (app_mq); evt = svm_msg_q_msg_data (app_mq, msg); memset (evt, 0, sizeof (*evt)); evt->event_type = SESSION_CTRL_EVT_DISCONNECTED; mp = (session_disconnected_msg_t *) evt->data; mp->handle = application_local_session_handle (ls); mp->context = app->api_client_index; - svm_msg_q_add (app_mq, msg, SVM_Q_WAIT); + svm_msg_q_add_and_unlock (app_mq, msg); } static void @@ -439,7 +438,6 @@ mq_send_session_accepted_cb (stream_session_t * s) app_mq = app_wrk->event_queue; svm_msg_q_lock_and_alloc_msg_w_ring (app_mq, SESSION_MQ_CTRL_EVT_RING, SVM_Q_WAIT, msg); - svm_msg_q_unlock (app_mq); evt = svm_msg_q_msg_data (app_mq, msg); memset (evt, 0, sizeof (*evt)); @@ -508,7 +506,7 @@ mq_send_session_accepted_cb (stream_session_t * s) mp->client_event_queue_address = ls->client_evt_q; mp->server_event_queue_address = ls->server_evt_q; } - svm_msg_q_add (app_mq, msg, SVM_Q_WAIT); + svm_msg_q_add_and_unlock (app_mq, msg); return 0; } @@ -527,14 +525,13 @@ mq_send_session_disconnected_cb (stream_session_t * s) app_mq = app_wrk->event_queue; svm_msg_q_lock_and_alloc_msg_w_ring (app_mq, SESSION_MQ_CTRL_EVT_RING, SVM_Q_WAIT, msg); - svm_msg_q_unlock (app_mq); evt = svm_msg_q_msg_data (app_mq, msg); memset (evt, 0, sizeof (*evt)); evt->event_type = SESSION_CTRL_EVT_DISCONNECTED; mp = (session_disconnected_msg_t *) evt->data; mp->handle = session_handle (s); mp->context = app->api_client_index; - svm_msg_q_add (app_mq, msg, SVM_Q_WAIT); + svm_msg_q_add_and_unlock (app_mq, msg); } static void @@ -549,13 +546,12 @@ mq_send_session_reset_cb (stream_session_t * s) app_mq = app->event_queue; svm_msg_q_lock_and_alloc_msg_w_ring (app_mq, SESSION_MQ_CTRL_EVT_RING, SVM_Q_WAIT, msg); - svm_msg_q_unlock (app_mq); evt = svm_msg_q_msg_data (app_mq, msg); memset (evt, 0, sizeof (*evt)); evt->event_type = SESSION_CTRL_EVT_RESET; mp = (session_reset_msg_t *) evt->data; mp->handle = session_handle (s); - svm_msg_q_add (app_mq, msg, SVM_Q_WAIT); + svm_msg_q_add_and_unlock (app_mq, msg); } static int @@ -582,7 +578,6 @@ mq_send_session_connected_cb (u32 app_wrk_index, u32 api_context, svm_msg_q_lock_and_alloc_msg_w_ring (app_mq, SESSION_MQ_CTRL_EVT_RING, SVM_Q_WAIT, msg); - svm_msg_q_unlock (app_mq); evt = svm_msg_q_msg_data (app_mq, msg); memset (evt, 0, sizeof (*evt)); evt->event_type = SESSION_CTRL_EVT_CONNECTED; @@ -634,7 +629,7 @@ done: mp->retval = is_fail ? clib_host_to_net_u32 (VNET_API_ERROR_SESSION_CONNECT) : 0; - svm_msg_q_add (app_mq, msg, SVM_Q_WAIT); + svm_msg_q_add_and_unlock (app_mq, msg); return 0; } @@ -663,7 +658,6 @@ mq_send_session_bound_cb (u32 app_wrk_index, u32 api_context, svm_msg_q_lock_and_alloc_msg_w_ring (app_mq, SESSION_MQ_CTRL_EVT_RING, SVM_Q_WAIT, msg); - svm_msg_q_unlock (app_mq); evt = svm_msg_q_msg_data (app_mq, msg); memset (evt, 0, sizeof (*evt)); evt->event_type = SESSION_CTRL_EVT_BOUND; @@ -700,7 +694,7 @@ mq_send_session_bound_cb (u32 app_wrk_index, u32 api_context, done: mp->retval = rv; - svm_msg_q_add (app_mq, msg, SVM_Q_WAIT); + svm_msg_q_add_and_unlock (app_mq, msg); return 0; } diff --git a/src/vnet/tcp/tcp_debug.h b/src/vnet/tcp/tcp_debug.h index a52efe00720..ccf12dae1bc 100755 --- a/src/vnet/tcp/tcp_debug.h +++ b/src/vnet/tcp/tcp_debug.h @@ -651,7 +651,11 @@ if (_av > 0) \ ed->data[3] = tcp_bytes_out(_tc); \ ed->data[4] = tcp_flight_size (_tc); \ } +#else +#define TCP_EVT_CC_EVT_HANDLER(_tc, _sub_evt, ...) +#endif +#if TCP_DEBUG_CC > 1 #define TCP_EVT_CC_RTX_HANDLER(_tc, offset, n_bytes, ...) \ { \ ELOG_TYPE_DECLARE (_e) = \ @@ -772,7 +776,6 @@ if (TCP_DEBUG_CC > 1) \ #define TCP_EVT_DUPACK_SENT_HANDLER(_tc, _btcp, ...) #define TCP_EVT_DUPACK_RCVD_HANDLER(_tc, ...) #define TCP_EVT_CC_PACK_HANDLER(_tc, ...) -#define TCP_EVT_CC_EVT_HANDLER(_tc, _sub_evt, ...) #define TCP_EVT_CC_SCOREBOARD_HANDLER(_tc, ...) #define TCP_EVT_CC_SACKS_HANDLER(_tc, ...) #define TCP_EVT_CC_INPUT_HANDLER(_tc, _len, _written, ...) -- 2.16.6