aboutsummaryrefslogtreecommitdiffstats
path: root/src/vcl
diff options
context:
space:
mode:
authorCarl Smith <carl.smith@alliedtelesis.co.nz>2019-11-12 14:57:37 +1300
committerAndrew Yourtchenko <ayourtch@gmail.com>2019-11-28 09:51:10 +0000
commitc48306407b070760a95ad1dbb349845e07dd3231 (patch)
treea8c9fd711f1cb3cdf133f5cdd7e4ab70beda135c /src/vcl
parent49cf46e0d0847796aecf7b62db961da416a5c9d7 (diff)
vcl: fix nonblocking accept with >1 event in the queue
We discard unwanted events until we get an ACCEPTED. But if we are non-blocking we need to check the queue length every time and EAGAIN if empty before waiting. Type: fix Signed-off-by: Carl Smith <carl.smith@alliedtelesis.co.nz> Change-Id: Ie0c7e5cb00f0d37d2e1534f8bb384221ff56f2e3 (cherry picked from commit 592a909a302262cf4088a5468b8e427f577725e8)
Diffstat (limited to 'src/vcl')
-rw-r--r--src/vcl/vppcom.c6
1 files changed, 3 insertions, 3 deletions
diff --git a/src/vcl/vppcom.c b/src/vcl/vppcom.c
index 349e27e5122..263fa916231 100644
--- a/src/vcl/vppcom.c
+++ b/src/vcl/vppcom.c
@@ -1464,11 +1464,11 @@ vppcom_session_accept (uint32_t listen_session_handle, vppcom_endpt_t * ep,
is_nonblocking = VCL_SESS_ATTR_TEST (listen_session->attr,
VCL_SESS_ATTR_NONBLOCK);
- if (svm_msg_q_is_empty (wrk->app_event_queue) && is_nonblocking)
- return VPPCOM_EAGAIN;
-
while (1)
{
+ if (svm_msg_q_is_empty (wrk->app_event_queue) && is_nonblocking)
+ return VPPCOM_EAGAIN;
+
if (svm_msg_q_sub (wrk->app_event_queue, &msg, SVM_Q_WAIT, 0))
return VPPCOM_EAGAIN;