From 03f7661a4a4433a7192dd9667b49df5820bbc603 Mon Sep 17 00:00:00 2001 From: Cloud Wu Date: Wed, 11 Mar 2015 16:48:43 +0800 Subject: [PATCH] don't delete sproto object when share it --- lualib/sproto.lua | 7 ++++--- lualib/sprotoloader.lua | 3 ++- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/lualib/sproto.lua b/lualib/sproto.lua index 98f88529..7907f406 100644 --- a/lualib/sproto.lua +++ b/lualib/sproto.lua @@ -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) diff --git a/lualib/sprotoloader.lua b/lualib/sprotoloader.lua index 28f32eca..05d17293 100644 --- a/lualib/sprotoloader.lua +++ b/lualib/sprotoloader.lua @@ -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