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)
This commit is contained in:
Carl Smith
committed by
Andrew Yourtchenko
parent
49cf46e0d0
commit
c48306407b
@ -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;
|
||||
|
||||
|
Reference in New Issue
Block a user