From 6fdb123df400030c9ea68476b15d19de8b9b1ac3 Mon Sep 17 00:00:00 2001 From: Cloud Wu Date: Sun, 4 Feb 2018 21:31:46 +0800 Subject: [PATCH] bugfix, See #800 --- lualib/skynet/datasheet/builder.lua | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/lualib/skynet/datasheet/builder.lua b/lualib/skynet/datasheet/builder.lua index ed2b7d47..34a7eaaf 100644 --- a/lualib/skynet/datasheet/builder.lua +++ b/lualib/skynet/datasheet/builder.lua @@ -82,13 +82,15 @@ end local function register_collector(name) local function collect() - local m = dataset[name].monitor + local t = dataset[name] + local m = t.monitor local i = 1 while m[i] do if not m[i] "TEST" then local n = #m m[i] = m[n] m[n] = nil + releasehandle(t.handle) else i = i + 1 end @@ -108,14 +110,24 @@ function datasheet.update(name, handle) handles[handle] = { ref = 1, name = name } register_collector(name) else + local old_handle = t.handle t.handle = handle -- report update to customers - handles[handle] = { ref = 1 + #t.monitor, name = name } + handles[handle] = { + ref = nil, + name = name + } + local ref = 1 for k,v in ipairs(t.monitor) do - v(true, handle) + if v(true, handle) then + ref = ref + 1 + else + releasehandle(old_handle) + end t.monitor[k] = nil end + handles[handle].ref = ref end skynet.ret() end