diff options
author | Jan Cavojsky <jan.cavojsky@pantheon.tech> | 2020-03-03 16:25:58 +0100 |
---|---|---|
committer | Damjan Marion <dmarion@me.com> | 2020-03-21 12:12:13 +0000 |
commit | 77a95cdce2f3d80dac2832b68310eb5b23769c0e (patch) | |
tree | f93e14b488eff23dd06e5cde6950347edb81c5d8 /extras/libmemif/src/main.c | |
parent | 6f533d780ded2d0d2a4ba2224e4a9f7d181c7577 (diff) |
libmemif: don't consume rx queue interrupt, if memif_rx_burst fails
Type: fix
Signed-off-by: Jan Cavojsky <jan.cavojsky@pantheon.tech>
Change-Id: Ic6c15c88c80c4045c290cd78533be6f070c7470a
Diffstat (limited to 'extras/libmemif/src/main.c')
-rw-r--r-- | extras/libmemif/src/main.c | 16 |
1 files changed, 12 insertions, 4 deletions
diff --git a/extras/libmemif/src/main.c b/extras/libmemif/src/main.c index 0c4adc256a2..b80dd6481b8 100644 --- a/extras/libmemif/src/main.c +++ b/extras/libmemif/src/main.c @@ -2506,14 +2506,18 @@ memif_rx_burst (memif_conn_handle_t conn, uint16_t qid, *rx = 0; uint64_t b; - ssize_t r = read (mq->int_fd, &b, sizeof (b)); - if (EXPECT_FALSE ((r == -1) && (errno != EAGAIN))) - return memif_syscall_error_handler (errno); + ssize_t r; cur_slot = (c->args.is_master) ? mq->last_head : mq->last_tail; last_slot = (c->args.is_master) ? ring->head : ring->tail; if (cur_slot == last_slot) - return MEMIF_ERR_SUCCESS; + { + r = read (mq->int_fd, &b, sizeof (b)); + if (EXPECT_FALSE ((r == -1) && (errno != EAGAIN))) + return memif_syscall_error_handler (errno); + + return MEMIF_ERR_SUCCESS; + } ns = last_slot - cur_slot; @@ -2562,6 +2566,10 @@ memif_rx_burst (memif_conn_handle_t conn, uint16_t qid, return MEMIF_ERR_NOBUF; } + r = read (mq->int_fd, &b, sizeof (b)); + if (EXPECT_FALSE ((r == -1) && (errno != EAGAIN))) + return memif_syscall_error_handler (errno); + return MEMIF_ERR_SUCCESS; /* 0 */ } |