mirror of
https://github.com/cloudwu/skynet.git
synced 2026-07-24 03:53:09 +00:00
bugfix: clear cached sub node
This commit is contained in:
@@ -31,14 +31,14 @@ end
|
||||
local function update(root, cobj, gcobj)
|
||||
root.__obj = cobj
|
||||
root.__gcobj = gcobj
|
||||
-- don't use pairs
|
||||
for k,v in next, root do
|
||||
if type(v)=="table" and k~="__parent" then
|
||||
local children = root.__cache
|
||||
if children then
|
||||
for k,v in pairs(children) do
|
||||
local pointer = index(cobj, k)
|
||||
if type(pointer) == "userdata" then
|
||||
update(v, pointer, gcobj)
|
||||
else
|
||||
root[k] = nil
|
||||
children[k] = nil
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -74,13 +74,22 @@ function meta:__index(key)
|
||||
local obj = getcobj(self)
|
||||
local v = index(obj, key)
|
||||
if type(v) == "userdata" then
|
||||
local r = setmetatable({
|
||||
local children = self.__cache
|
||||
if children == nil then
|
||||
children = {}
|
||||
self.__cache = children
|
||||
end
|
||||
local r = children[key]
|
||||
if r then
|
||||
return r
|
||||
end
|
||||
r = setmetatable({
|
||||
__obj = v,
|
||||
__gcobj = self.__gcobj,
|
||||
__parent = self,
|
||||
__key = key,
|
||||
}, meta)
|
||||
self[key] = r
|
||||
children[key] = r
|
||||
return r
|
||||
else
|
||||
return v
|
||||
|
||||
Reference in New Issue
Block a user