summaryrefslogtreecommitdiffstats
path: root/src/vcl/vppcom.c
diff options
context:
space:
mode:
authorFlorin Coras <fcoras@cisco.com>2020-04-19 23:12:08 +0000
committerDave Barach <openvpp@barachs.net>2020-04-20 14:46:41 +0000
commitf49cf470c583507fa1b5b841887107071701ef5e (patch)
treebda7b9369a70c4d2f9d9a11087bee888f9b7eca2 /src/vcl/vppcom.c
parentcbce80aaa3f1853856d4d64c95f10d65caa4d786 (diff)
vcl: ensure sessions are open on select events
Type: fix Signed-off-by: Florin Coras <fcoras@cisco.com> Change-Id: I4d56b61af574dfdaf6028160ce331606bdf65609
Diffstat (limited to 'src/vcl/vppcom.c')
-rw-r--r--src/vcl/vppcom.c12
1 files changed, 5 insertions, 7 deletions
diff --git a/src/vcl/vppcom.c b/src/vcl/vppcom.c
index 33e0c197186..186b08468fd 100644
--- a/src/vcl/vppcom.c
+++ b/src/vcl/vppcom.c
@@ -2160,7 +2160,7 @@ vcl_select_handle_mq_event (vcl_worker_t * wrk, session_event_t * e,
case SESSION_IO_EVT_RX:
sid = e->session_index;
session = vcl_session_get (wrk, sid);
- if (!session)
+ if (!session || !vcl_session_is_open (session))
break;
vcl_fifo_rx_evt_valid_or_break (session);
if (sid < n_bits && read_map)
@@ -2172,7 +2172,7 @@ vcl_select_handle_mq_event (vcl_worker_t * wrk, session_event_t * e,
case SESSION_IO_EVT_TX:
sid = e->session_index;
session = vcl_session_get (wrk, sid);
- if (!session)
+ if (!session || !vcl_session_is_open (session))
break;
if (sid < n_bits && write_map)
{
@@ -2365,7 +2365,7 @@ vppcom_select (int n_bits, vcl_si_set * read_map, vcl_si_set * write_map,
u32 sid, minbits = clib_max (n_bits, BITS (uword)), bits_set = 0;
vcl_worker_t *wrk = vcl_worker_get_current ();
vcl_session_t *session = 0;
- int rv, i;
+ int i;
if (n_bits && read_map)
{
@@ -2404,8 +2404,7 @@ vppcom_select (int n_bits, vcl_si_set * read_map, vcl_si_set * write_map,
continue;
}
- rv = svm_fifo_is_full_prod (session->tx_fifo);
- if (!rv)
+ if (vcl_session_write_ready (session) > 0)
{
clib_bitmap_set_no_check ((uword*)write_map, sid, 1);
bits_set++;
@@ -2426,8 +2425,7 @@ check_rd:
continue;
}
- rv = vcl_session_read_ready (session);
- if (rv)
+ if (vcl_session_read_ready (session) > 0)
{
clib_bitmap_set_no_check ((uword*)read_map, sid, 1);
bits_set++;