diff options
author | Florin Coras <fcoras@cisco.com> | 2020-04-19 23:12:08 +0000 |
---|---|---|
committer | Andrew Yourtchenko <ayourtch@gmail.com> | 2020-08-13 17:20:47 +0000 |
commit | 188d2c481e34e7403efa357089b66bebbd95a0dc (patch) | |
tree | 2aaf91e1698b355621a0c0de0a48eea851a7e265 | |
parent | 00eac4a8f8fd0561ce4a67c4f2e2205f9229b181 (diff) |
vcl: ensure sessions are open on select events
Type: fix
Signed-off-by: Florin Coras <fcoras@cisco.com>
Change-Id: I4d56b61af574dfdaf6028160ce331606bdf65609
(cherry picked from commit f49cf470c583507fa1b5b841887107071701ef5e)
-rw-r--r-- | src/vcl/vppcom.c | 12 |
1 files changed, 5 insertions, 7 deletions
diff --git a/src/vcl/vppcom.c b/src/vcl/vppcom.c index 0925246f8a1..2c87dff6172 100644 --- a/src/vcl/vppcom.c +++ b/src/vcl/vppcom.c @@ -2024,7 +2024,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) @@ -2036,7 +2036,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) { @@ -2217,7 +2217,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) { @@ -2256,8 +2256,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++; @@ -2278,8 +2277,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++; |