From b9a3185e4556e8c5785a60fb57c2924bbd0529f7 Mon Sep 17 00:00:00 2001
From: Kumar Kaushik <kaushikk@vmware.com>
Date: Wed, 29 Nov 2017 18:47:39 -0800
Subject: [PATCH] Avoiding previous errno variable use
Change-Id: I76b0ef967df8b1ad6fa1844e1e461af470bb3b0f
---
transport/posix/socket.c | 51 +++++++++++++++++++++++++++++++-----------------
1 file changed, 33 insertions(+), 18 deletions(-)
diff --git a/transport/posix/socket.c b/transport/posix/socket.c
index 79c7a38..d3a3dbc 100644
--- a/transport/posix/socket.c
+++ b/transport/posix/socket.c
@@ -853,6 +853,8 @@ VmSockPosixRead(
do
{
nRead = 0;
+ errno = 0;
+ errorCode = 0;
if (pRESTHandle->pSSLInfo->isSecure && (pSocket->ssl != NULL))
{
nRead = SSL_read(pSocket->ssl, (pszBufPrev + nPrevBuf), MAX_DATA_BUFFER_LEN);
@@ -864,7 +866,7 @@ VmSockPosixRead(
errorCode = errno;
}
- if ((nRead > 0) && (nRead <= MAX_DATA_BUFFER_LEN))
+ if (nRead > 0)
{
nPrevBuf += nRead;
dwError = VmRESTReallocateMemory(
@@ -877,22 +879,6 @@ VmSockPosixRead(
}
}while((nRead > 0) && (nPrevBuf < pRESTHandle->pRESTConfig->maxDataPerConnMB));
- if (((pSocket->fd > 0) && (errorCode == EAGAIN || errorCode == EWOULDBLOCK)) || ((pRESTHandle->pSSLInfo->isSecure) && (errorCode == SSL_ERROR_WANT_READ)))
- {
- dwError = REST_ENGINE_SUCCESS;
- }
- else if (nRead < 0)
- {
- VMREST_LOG_ERROR(pRESTHandle, "Socket read failed with error code %u", errorCode);
- dwError = errorCode;
- }
- else if (nRead == 0)
- {
- VMREST_LOG_ERROR(pRESTHandle,"%s", "Socket read failed due to broken pipe");
- dwError = VM_SOCK_POSIX_ERROR_BROKEN_PIPE;
- }
- BAIL_ON_VMREST_ERROR(dwError);
-
if (nPrevBuf >= pRESTHandle->pRESTConfig->maxDataPerConnMB)
{
/**** Discard the request here itself. This might be the first read IO cycle ****/
@@ -901,6 +887,33 @@ VmSockPosixRead(
}
BAIL_ON_VMREST_ERROR(dwError);
+ if (nRead == -1)
+ {
+ if (((pSocket->fd > 0) && (errorCode == EAGAIN || errorCode == EWOULDBLOCK)) || ((pRESTHandle->pSSLInfo->isSecure) && (errorCode == SSL_ERROR_WANT_READ)))
+ {
+ dwError = REST_ENGINE_SUCCESS;
+ }
+ else
+ {
+ VMREST_LOG_ERROR(pRESTHandle,"%s","Unknown socket read error: errno %u, errorCode %u, nRead %d", errno, errorCode, nRead);
+ dwError = REST_ENGINE_FAILURE;
+ }
+ }
+ else
+ {
+ if (nRead == 0)
+ {
+ VMREST_LOG_ERROR(pRESTHandle,"%s","Socket Read Failed: Remote has closed the connection");
+ dwError = VM_SOCK_POSIX_ERROR_BROKEN_PIPE;
+ }
+ else
+ {
+ VMREST_LOG_ERROR(pRESTHandle, "Socket read failed with error code %u", errorCode);
+ dwError = errorCode;
+ }
+ }
+ BAIL_ON_VMREST_ERROR(dwError);
+
pSocket->pszBuffer = pszBufPrev;
pSocket->nProcessed = 0;
pSocket->nBufData = nPrevBuf;
@@ -933,11 +946,12 @@ VmSockPosixRead(
if (pszBufPrev && pSocket && pRESTHandle->pSockContext)
{
/**** Delete the socket from poller ****/
+
VmSockPosixEventQueueDelete_inlock(
pRESTHandle->pSockContext->pEventQueue,
pSocket
);
-
+
VmRESTFreeMemory(pszBufPrev);
pszBufPrev = NULL;
pSocket->pszBuffer = NULL;
@@ -1566,6 +1580,7 @@ VmSockPosixSetRequestHandle(
pSocket
);
BAIL_ON_VMREST_ERROR(dwError);
+
if (pSocket->pTimerSocket->fd > 0)
{