mirror of
https://github.com/cloudwu/skynet.git
synced 2026-07-25 12:43:09 +00:00
bugfix, See #800
This commit is contained in:
@@ -82,13 +82,15 @@ end
|
|||||||
|
|
||||||
local function register_collector(name)
|
local function register_collector(name)
|
||||||
local function collect()
|
local function collect()
|
||||||
local m = dataset[name].monitor
|
local t = dataset[name]
|
||||||
|
local m = t.monitor
|
||||||
local i = 1
|
local i = 1
|
||||||
while m[i] do
|
while m[i] do
|
||||||
if not m[i] "TEST" then
|
if not m[i] "TEST" then
|
||||||
local n = #m
|
local n = #m
|
||||||
m[i] = m[n]
|
m[i] = m[n]
|
||||||
m[n] = nil
|
m[n] = nil
|
||||||
|
releasehandle(t.handle)
|
||||||
else
|
else
|
||||||
i = i + 1
|
i = i + 1
|
||||||
end
|
end
|
||||||
@@ -108,14 +110,24 @@ function datasheet.update(name, handle)
|
|||||||
handles[handle] = { ref = 1, name = name }
|
handles[handle] = { ref = 1, name = name }
|
||||||
register_collector(name)
|
register_collector(name)
|
||||||
else
|
else
|
||||||
|
local old_handle = t.handle
|
||||||
t.handle = handle
|
t.handle = handle
|
||||||
-- report update to customers
|
-- 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
|
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
|
t.monitor[k] = nil
|
||||||
end
|
end
|
||||||
|
handles[handle].ref = ref
|
||||||
end
|
end
|
||||||
skynet.ret()
|
skynet.ret()
|
||||||
end
|
end
|
||||||
|
|||||||
Reference in New Issue
Block a user