Add calling usleep() to avoid busy wating 13/276013/1
authorIlho Kim <ilho159.kim@samsung.com>
Tue, 31 May 2022 08:29:21 +0000 (17:29 +0900)
committerIlho Kim <ilho159.kim@samsung.com>
Wed, 8 Jun 2022 11:31:33 +0000 (20:31 +0900)
If the socket is non-blocking mode, while loop can make busy wating
To avoid busy wating, this patch adds calling usleep() with 100 ms

Change-Id: Id4c17e2f8e403ebfe17ae903fa1f4ccb86822c58
Signed-off-by: Ilho Kim <ilho159.kim@samsung.com>
(cherry picked from commit b4b9519f950d2ad2341e96e813cdbd09a737c701)

src/common/socket/abstract_socket.cc

index 9ceca3800ad1fc2d7d37cd36fe03c5331e6c90f0..6cc9063476d4633eddbcc45f2aad74d1e274429d 100644 (file)
@@ -61,6 +61,7 @@ int AbstractSocket::SendData(const void* buf, unsigned int size) {
 
 int AbstractSocket::ReceiveData(void* buf, unsigned int size) {
   bool is_blocking = true;
+  int retry_count = 20;
 
   if (fcntl(fd_, F_GETFL, 0) & O_NONBLOCK)
     is_blocking = false;
@@ -82,7 +83,14 @@ int AbstractSocket::ReceiveData(void* buf, unsigned int size) {
           return -errno;
         }
 
-        continue;
+        if (retry_count > 0) {
+          LOG(WARNING) << "Fail to receive data from "
+              << "non-blocking socket retry count : " << retry_count
+              << " left byte : " << left << " receive byte : " << recv_byte;
+          usleep(100 * 1000);
+          retry_count--;
+          continue;
+        }
       }
 
       LOG(ERROR) << "recv() is failed. fd: " << fd_ << ", errno: " << errno;