bugfix: update until delete

This commit is contained in:
Cloud Wu
2014-07-29 21:22:49 +08:00
parent 434cd1ca79
commit 68a952ff17
3 changed files with 29 additions and 6 deletions

View File

@@ -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)

View File

@@ -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)

View File

@@ -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