From 31724a1b7802b7476eb02da7db94bf1edc277e23 Mon Sep 17 00:00:00 2001
From: Roman Tsisyk <roman@tsisyk.com>
Date: Tue, 18 Aug 2015 20:01:57 +0300
Subject: [PATCH] Remove ibuf.__index

---
 src/lua/bsdsocket.lua  | 18 +++++++++---------
 src/lua/buffer.lua     | 29 ++++++-----------------------
 src/lua/msgpackffi.lua |  2 +-
 src/lua/net_box.lua    | 30 +++++++++++++++++-------------
 4 files changed, 33 insertions(+), 46 deletions(-)

diff --git a/src/lua/bsdsocket.lua b/src/lua/bsdsocket.lua
index 6d7c5edaec..cb0b11e51a 100644
--- a/src/lua/bsdsocket.lua
+++ b/src/lua/bsdsocket.lua
@@ -582,7 +582,7 @@ local errno_is_fatal = {
 }
 
 local function check_limit(self, limit)
-    if self.rbuf.size >= limit then
+    if self.rbuf:size() >= limit then
         return limit
     end
     return nil
@@ -593,13 +593,13 @@ local function check_delimiter(self, limit, eols)
         return 0
     end
     local rbuf = self.rbuf
-    if rbuf.size == 0 then
+    if rbuf:size() == 0 then
         return nil
     end
 
     local shortest
     for i, eol in ipairs(eols) do
-        local data = ffi.C.memmem(rbuf.rpos, rbuf.size, eol, #eol)
+        local data = ffi.C.memmem(rbuf.rpos, rbuf:size(), eol, #eol)
         if data ~= nil then
             local len = ffi.cast('char *', data) - rbuf.rpos + #eol
             if shortest == nil or shortest > len then
@@ -609,7 +609,7 @@ local function check_delimiter(self, limit, eols)
     end
     if shortest ~= nil and shortest <= limit then
         return shortest
-    elseif limit <= rbuf.size then
+    elseif limit <= rbuf:size() then
         return limit
     end
     return nil
@@ -636,14 +636,14 @@ local function read(self, limit, timeout, check, ...)
     while timeout > 0 do
         local started = fiber.time()
 
-        assert(rbuf.size < limit)
-        local to_read = math.min(limit - rbuf.size, buffer.READAHEAD)
+        assert(rbuf:size() < limit)
+        local to_read = math.min(limit - rbuf:size(), buffer.READAHEAD)
         local data = rbuf:reserve(to_read)
-        assert(rbuf.unused >= to_read)
-        local res = sysread(self, data, rbuf.unused)
+        assert(rbuf:unused() >= to_read)
+        local res = sysread(self, data, rbuf:unused())
         if res == 0 then -- eof
             self._errno = nil
-            local len = rbuf.size
+            local len = rbuf:size()
             local data = ffi.string(rbuf.rpos, len)
             rbuf.rpos = rbuf.rpos + len
             return data
diff --git a/src/lua/buffer.lua b/src/lua/buffer.lua
index 6823b0a98a..0f9a3cdf47 100644
--- a/src/lua/buffer.lua
+++ b/src/lua/buffer.lua
@@ -127,18 +127,8 @@ local function ibuf_read(buf, size)
     return rpos
 end
 
-local ibuf_properties = {
-    size = ibuf_used;
-    capacity = ibuf_capacity;
-    pos = ibuf_pos;
-    unused = ibuf_unused;
-}
-
 local function ibuf_serialize(buf)
     local properties = { rpos = buf.rpos, wpos = buf.wpos }
-    for key, getter in pairs(ibuf_properties) do
-        properties[key] = getter(buf)
-    end
     return { ibuf = properties }
 end
 
@@ -152,26 +142,19 @@ local ibuf_methods = {
     checksize = ibuf_checksize;
     read = ibuf_read;
     __serialize = ibuf_serialize;
-}
 
-local function ibuf_index(buf, key)
-    local property = ibuf_properties[key]
-    if property ~= nil then
-        return property(buf)
-    end
-    local method = ibuf_methods[key]
-    if method ~= nil then
-        return method
-    end
-    return nil
-end
+    size = ibuf_used;
+    capacity = ibuf_capacity;
+    pos = ibuf_pos;
+    unused = ibuf_unused;
+}
 
 local function ibuf_tostring(ibuf)
     return '<ibuf>'
 end
 local ibuf_mt = {
     __gc = ibuf_recycle;
-    __index = ibuf_index;
+    __index = ibuf_methods;
     __tostring = ibuf_tostring;
 };
 
diff --git a/src/lua/msgpackffi.lua b/src/lua/msgpackffi.lua
index 7fd585ca63..b6168ed57b 100644
--- a/src/lua/msgpackffi.lua
+++ b/src/lua/msgpackffi.lua
@@ -227,7 +227,7 @@ local function encode(obj)
     local tmpbuf = buffer.IBUF_SHARED
     tmpbuf:reset()
     encode_r(tmpbuf, obj, 0)
-    local r = ffi.string(tmpbuf.rpos, tmpbuf.size)
+    local r = ffi.string(tmpbuf.rpos, tmpbuf:size())
     tmpbuf:recycle()
     return r
 end
diff --git a/src/lua/net_box.lua b/src/lua/net_box.lua
index 038c251418..5b5255796d 100644
--- a/src/lua/net_box.lua
+++ b/src/lua/net_box.lua
@@ -599,7 +599,7 @@ local remote_methods = {
 
     _check_console_response = function(self)
         local docend = "\n...\n"
-        local resp = ffi.string(self.rbuf.rpos, self.rbuf.size)
+        local resp = ffi.string(self.rbuf.rpos, self.rbuf:size())
 
         if #resp < #docend or
                 string.sub(resp, #resp + 1 - #docend) ~= docend then
@@ -619,10 +619,21 @@ local remote_methods = {
         return 0
     end,
 
+    _wakeup_client = function(self, hdr, body)
+        local sync = hdr[SYNC]
+
+        if self.ch.sync[sync] ~= nil then
+            self.ch.sync[sync]:put({ hdr = hdr, body = body })
+            self.ch.sync[sync] = nil
+        else
+            log.warn("Unexpected response %s", tostring(sync))
+        end
+    end,
+
     _check_binary_response = function(self)
         while true do
-            if self.rbuf.size < 5 then
-                return 0
+            if self.rbuf.rpos + 5 > self.rbuf.wpos then
+                return 5 - (self.wpos - self.rpos)
             end
 
             local rpos, len = msgpack.ibuf_decode(self.rbuf.rpos)
@@ -639,16 +650,9 @@ local remote_methods = {
             setmetatable(body, mapping_mt)
 
             self.rbuf.rpos = rpos
-            local sync = hdr[SYNC]
-
-            if self.ch.sync[sync] ~= nil then
-                self.ch.sync[sync]:put({ hdr = hdr, body = body })
-                self.ch.sync[sync] = nil
-            else
-                log.warn("Unexpected response %s", tostring(sync))
-            end
+            self:_wakeup_client(hdr, body)
 
-           if self.rbuf.size == 0 then
+           if self.rbuf:size() == 0 then
                 return 0
             end
         end
@@ -899,7 +903,7 @@ local remote_methods = {
         self.rbuf = buffer.ibuf(buffer.READAHEAD)
         while self:_wait_state(self._r_states) ~= 'closed' do
             if self.s:readable() then
-                local len = self.s:sysread(self.rbuf.wpos, self.rbuf.unused)
+                local len = self.s:sysread(self.rbuf.wpos, self.rbuf:unused())
                 if len ~= nil then
                     if len == 0 then
                         self:_fatal('Remote host closed connection')
-- 
GitLab