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