mirror of
https://github.com/cloudwu/skynet.git
synced 2026-07-22 02:53:09 +00:00
bugfix: update until delete
This commit is contained in:
@@ -10,9 +10,15 @@ skynet.start(function()
|
||||
sharedata.new("foobar", { a=1, b= { "hello", "world" } })
|
||||
|
||||
skynet.fork(function()
|
||||
skynet.sleep(300) -- sleep 3s
|
||||
skynet.sleep(200) -- sleep 3s
|
||||
skynet.error("update foobar")
|
||||
sharedata.update("foobar", { a =2 })
|
||||
skynet.sleep(200) -- sleep 3s
|
||||
skynet.error("update foobar")
|
||||
sharedata.update("foobar", { a = 3, b = { "change" } })
|
||||
skynet.sleep(100)
|
||||
skynet.error("delete foobar")
|
||||
sharedata.delete "foobar"
|
||||
end)
|
||||
end)
|
||||
|
||||
@@ -47,6 +53,11 @@ skynet.start(function()
|
||||
skynet.error(err)
|
||||
end
|
||||
|
||||
-- obj. b is not the same with local b
|
||||
for k,v in ipairs(obj.b) do
|
||||
skynet.error(string.format("b[%d] = %s", k , tostring(v)))
|
||||
end
|
||||
|
||||
collectgarbage()
|
||||
skynet.error("sleep")
|
||||
skynet.sleep(100)
|
||||
@@ -55,8 +66,6 @@ skynet.start(function()
|
||||
skynet.error("sleep")
|
||||
skynet.sleep(100)
|
||||
|
||||
sharedata.delete "foobar"
|
||||
|
||||
skynet.exit()
|
||||
end)
|
||||
|
||||
|
||||
@@ -10,8 +10,15 @@ end)
|
||||
local sharedata = {}
|
||||
|
||||
local function monitor(name, obj, cobj)
|
||||
local newobj = skynet.call(service, "lua", "monitor", name, cobj)
|
||||
sd.update(obj, newobj)
|
||||
local newobj = cobj
|
||||
while true do
|
||||
newobj = skynet.call(service, "lua", "monitor", name, newobj)
|
||||
if newobj == nil then
|
||||
return
|
||||
end
|
||||
sd.update(obj, newobj)
|
||||
end
|
||||
print("name exit")
|
||||
end
|
||||
|
||||
function sharedata.query(name)
|
||||
|
||||
@@ -56,6 +56,11 @@ function CMD.delete(name)
|
||||
assert(objmap[v.obj])
|
||||
objmap[v.obj] = true
|
||||
sharedata.host.decref(v.obj)
|
||||
for _,v in ipairs(v.watch) do
|
||||
local session = v[1]
|
||||
local address = v[2]
|
||||
skynet.redirect(address, 0, "response", session, skynet.pack(nil))
|
||||
end
|
||||
end
|
||||
|
||||
function CMD.query(name)
|
||||
@@ -78,7 +83,9 @@ function CMD.update(name, t)
|
||||
if v then
|
||||
watch = v.watch
|
||||
oldcobj = v.obj
|
||||
CMD.delete(name)
|
||||
objmap[oldcobj] = true
|
||||
sharedata.host.decref(oldcobj)
|
||||
pool[name] = nil
|
||||
end
|
||||
CMD.new(name, t)
|
||||
local newobj = pool[name].obj
|
||||
|
||||
Reference in New Issue
Block a user