diff --git a/lualib/skynet.lua b/lualib/skynet.lua index c20efaa2..2dd38f8d 100644 --- a/lualib/skynet.lua +++ b/lualib/skynet.lua @@ -608,11 +608,15 @@ local function init_all() end end +local function ret(f, ...) + f() + return ... +end + local function init_template(start) init_all() init_func = {} - start() - init_all() + return ret(init_all, start()) end function skynet.pcall(start) diff --git a/service/sharedatad.lua b/service/sharedatad.lua index d76fd115..1ae9022c 100644 --- a/service/sharedatad.lua +++ b/service/sharedatad.lua @@ -1,6 +1,8 @@ local skynet = require "skynet" local sharedata = require "sharedata.corelib" local table = table +local cache = require "skynet.codecache" +cache.mode "OFF" -- turn off codecache, because CMD.new may load data file local NORET = {} local pool = {} @@ -43,9 +45,17 @@ function CMD.new(name, t) value = t elseif dt == "string" then value = setmetatable({}, env_mt) - local f = load(t, "=" .. name, "t", value) - assert(skynet.pcall(f)) + local f + if t:sub(1,1) == "@" then + f = assert(loadfile(t:sub(2),"bt",value)) + else + f = assert(load(t, "=" .. name, "bt", value)) + end + local _, ret = assert(skynet.pcall(f)) setmetatable(value, nil) + if type(ret) == "table" then + value = ret + end elseif dt == "nil" then value = {} else