From a4af00e05956f3e1e69b8d961352a93e43d4fb17 Mon Sep 17 00:00:00 2001
From: Konstantin Osipov <kostja@tarantool.org>
Date: Tue, 24 Mar 2015 23:16:57 +0300
Subject: [PATCH] net.box: change reader logic to pessimistic, this reduces the
 number of epoll_wait() calls

---
 src/lua/net_box.lua | 28 ++++++++++++++--------------
 1 file changed, 14 insertions(+), 14 deletions(-)

diff --git a/src/lua/net_box.lua b/src/lua/net_box.lua
index 7473f21acc..f205851f90 100644
--- a/src/lua/net_box.lua
+++ b/src/lua/net_box.lua
@@ -917,22 +917,22 @@ local remote_methods = {
     _read_worker = function(self)
         fiber.name('net.box.read')
         while self:_wait_state(self._r_states) ~= 'closed' do
-            local data = self.s:sysread()
+            if self.s:readable() then
+                local data = self.s:sysread()
 
-            if data ~= nil then
-                if #data == 0 then
-                    self:_fatal('Remote host closed connection')
-                else
-                    self.rbuf = string.sub(self.rbuf, self.rpos) ..
-                                data
-                    self.rpos = 1
-                    self.rlen = #self.rbuf
-                    self:_check_response()
+                if data ~= nil then
+                    if #data == 0 then
+                        self:_fatal('Remote host closed connection')
+                    else
+                        self.rbuf = string.sub(self.rbuf, self.rpos) ..
+                                    data
+                        self.rpos = 1
+                        self.rlen = #self.rbuf
+                        self:_check_response()
+                    end
+                elseif errno_is_transient[errno()] ~= true then
+                    self:_fatal(errno.strerror(errno()))
                 end
-            elseif errno_is_transient[errno()] then
-                self.s:readable()
-            else
-                self:_fatal(errno.strerror(errno()))
             end
         end
     end,
-- 
GitLab