diff --git a/lualib/skynet.lua b/lualib/skynet.lua index 295696a7..08a3fa13 100644 --- a/lualib/skynet.lua +++ b/lualib/skynet.lua @@ -656,6 +656,11 @@ function skynet.term(service) return _error_dispatch(0, service) end +function skynet.memlimit(bytes) + debug.getregistry().memlimit = bytes + skynet.memlimit = nil -- set only once +end + local function clear_pool() coroutine_pool = {} end diff --git a/lualib/skynet/manager.lua b/lualib/skynet/manager.lua index 627d1e12..4365d2e2 100644 --- a/lualib/skynet/manager.lua +++ b/lualib/skynet/manager.lua @@ -20,10 +20,6 @@ function skynet.abort() c.command("ABORT") end -function skynet.memlimit(bytes) - debug.getregistry().memlimit = bytes -end - local function globalname(name, handle) local c = string.sub(name,1,1) assert(c ~= ':') diff --git a/service-src/service_snlua.c b/service-src/service_snlua.c index 4870baa9..6f2ea6c5 100644 --- a/service-src/service_snlua.c +++ b/service-src/service_snlua.c @@ -121,6 +121,8 @@ init_cb(struct snlua *l, struct skynet_context *ctx, const char * args, size_t s size_t limit = lua_tointeger(L, -1); l->mem_limit = limit; skynet_error(ctx, "Set memory limit to %.2f M", (float)limit / (1024 * 1024)); + lua_pushnil(L); + lua_setfield(L, LUA_REGISTRYINDEX, "memlimit"); } lua_pop(L, 1); diff --git a/test/testmemlimit.lua b/test/testmemlimit.lua index 532df727..41072dcc 100644 --- a/test/testmemlimit.lua +++ b/test/testmemlimit.lua @@ -1,5 +1,4 @@ local skynet = require "skynet" -require "skynet.manager" -- set sandbox memory limit to 1M, must set here (at start, out of skynet.start) skynet.memlimit(1 * 1024 * 1024)