diff options
author | Nathan Skrzypczak <nathan.skrzypczak@gmail.com> | 2019-06-20 09:58:37 +0200 |
---|---|---|
committer | Florin Coras <florin.coras@gmail.com> | 2019-06-24 23:35:28 +0000 |
commit | b4c677526b7ad43f6960526e9103c1679adae1eb (patch) | |
tree | 5ae10f00e022cddcb134918117ebbe14aae40baa /src/vnet | |
parent | 9d97d014119988a26131dee1d148d3265539f9cc (diff) |
session: full lock on session_send_evt_to_thread
Type: fix
This was causing issues in QUIC when an app client & the protocol
app compete for the worker msg_queue. Might not be ideal performance-
wise.
Change-Id: I629892253d5b5d968f31ad1d56f18463e143d6b4
Signed-off-by: Nathan Skrzypczak <nathan.skrzypczak@gmail.com>
Diffstat (limited to 'src/vnet')
-rw-r--r-- | src/vnet/session/session.c | 12 |
1 files changed, 2 insertions, 10 deletions
diff --git a/src/vnet/session/session.c b/src/vnet/session/session.c index 8aa4af935e9..ea52b75086d 100644 --- a/src/vnet/session/session.c +++ b/src/vnet/session/session.c @@ -32,18 +32,10 @@ session_send_evt_to_thread (void *data, void *args, u32 thread_index, session_event_t *evt; svm_msg_q_msg_t msg; svm_msg_q_t *mq; - u32 tries = 0, max_tries; mq = session_main_get_vpp_event_queue (thread_index); - while (svm_msg_q_try_lock (mq)) - { - max_tries = vlib_get_current_process (vlib_get_main ())? 1e6 : 3; - if (tries++ == max_tries) - { - SESSION_DBG ("failed to enqueue evt"); - return -1; - } - } + if (PREDICT_FALSE (svm_msg_q_lock (mq))) + return -1; if (PREDICT_FALSE (svm_msg_q_ring_is_full (mq, SESSION_MQ_IO_EVT_RING))) { svm_msg_q_unlock (mq); |