don't delete sproto object when share it

This commit is contained in:
Cloud Wu
2015-03-11 16:48:43 +08:00
parent f95d8db4da
commit 03f7661a4a
2 changed files with 6 additions and 4 deletions

View File

@@ -6,20 +6,21 @@ local host = {}
local weak_mt = { __mode = "kv" }
local sproto_mt = { __index = sproto }
local sproto_nogc = { __index = sproto }
local host_mt = { __index = host }
function sproto_mt:__gc()
core.deleteproto(self.__cobj)
end
function sproto.new(...)
local cobj = assert(core.newproto(...))
function sproto.new(bin,sz,nogc)
local cobj = assert(core.newproto(bin,sz))
local self = {
__cobj = cobj,
__tcache = setmetatable( {} , weak_mt ),
__pcache = setmetatable( {} , weak_mt ),
}
return setmetatable(self, sproto_mt)
return setmetatable(self, nogc and sproto_nogc or sproto_mt)
end
function sproto.parse(ptext)

View File

@@ -16,7 +16,8 @@ loader.save = core.saveproto
function loader.load(index)
local bin, sz = core.loadproto(index)
return sproto.new(bin,sz)
-- no __gc in metatable
return sproto.new(bin,sz, true)
end
return loader