From: Florin Coras Date: Fri, 14 Feb 2020 05:33:46 +0000 (+0000) Subject: vcl: fix ldp read on closing session X-Git-Tag: v20.09-rc0~585 X-Git-Url: https://gerrit.fd.io/r/gitweb?p=vpp.git;a=commitdiff_plain;h=067f9544d52c95c0b60b0e8425fce1e295120180 vcl: fix ldp read on closing session Type: fix Signed-off-by: Florin Coras Change-Id: I60be191866d20721951ad22f571a2a3275511e12 --- diff --git a/src/vcl/ldp.c b/src/vcl/ldp.c index d0cf2b91367..95c0edcff0a 100644 --- a/src/vcl/ldp.c +++ b/src/vcl/ldp.c @@ -380,24 +380,19 @@ readv (int fd, const struct iovec * iov, int iovcnt) vlsh = ldp_fd_to_vlsh (fd); if (vlsh != VLS_INVALID_HANDLE) { - do + for (i = 0; i < iovcnt; ++i) { - for (i = 0; i < iovcnt; ++i) + rv = vls_read (vlsh, iov[i].iov_base, iov[i].iov_len); + if (rv <= 0) + break; + else { - rv = vls_read (vlsh, iov[i].iov_base, iov[i].iov_len); - if (rv < 0) + total += rv; + if (rv < iov[i].iov_len) break; - else - { - total += rv; - if (rv < iov[i].iov_len) - break; - } } } - while ((rv >= 0) && (total == 0)); - - if (rv < 0) + if (rv < 0 && total == 0) { errno = -rv; size = -1; diff --git a/src/vcl/vcl_private.h b/src/vcl/vcl_private.h index faab1c2282b..b50bad26b90 100644 --- a/src/vcl/vcl_private.h +++ b/src/vcl/vcl_private.h @@ -543,8 +543,8 @@ vcl_session_is_closing (vcl_session_t * s) static inline int vcl_session_closing_error (vcl_session_t * s) { - return s->session_state == STATE_DISCONNECT - ? VPPCOM_ECONNRESET : VPPCOM_ECONNABORTED; + /* Return 0 on closing sockets */ + return s->session_state == STATE_DISCONNECT ? VPPCOM_ECONNRESET : 0; } static inline int