vcl: fix ldp read on closing session 27/25127/3
authorFlorin Coras <fcoras@cisco.com>
Fri, 14 Feb 2020 05:33:46 +0000 (05:33 +0000)
committerDave Barach <openvpp@barachs.net>
Fri, 14 Feb 2020 15:17:41 +0000 (15:17 +0000)
Type: fix

Signed-off-by: Florin Coras <fcoras@cisco.com>
Change-Id: I60be191866d20721951ad22f571a2a3275511e12

src/vcl/ldp.c
src/vcl/vcl_private.h

index d0cf2b9..95c0edc 100644 (file)
@@ -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;
index faab1c2..b50bad2 100644 (file)
@@ -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