From 6f40120ad83affadc6d3b8678b2644548bb283bb Mon Sep 17 00:00:00 2001 From: Cloud Wu Date: Tue, 2 Apr 2019 20:47:27 +0800 Subject: [PATCH] expand SSM during loadfile --- 3rd/lua/lauxlib.c | 1 + 3rd/lua/lstring.c | 9 +++++++-- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/3rd/lua/lauxlib.c b/3rd/lua/lauxlib.c index 63387b7b..fa775d47 100644 --- a/3rd/lua/lauxlib.c +++ b/3rd/lua/lauxlib.c @@ -1175,6 +1175,7 @@ LUALIB_API int luaL_loadfilex (lua_State *L, const char *filename, } luaS_expandshr(4096); int err = luaL_loadfilex_(eL, filename, mode); + luaS_expandshr(-4096); if (err != LUA_OK) { size_t sz = 0; const char * msg = lua_tolstring(eL, -1, &sz); diff --git a/3rd/lua/lstring.c b/3rd/lua/lstring.c index 68de011d..b0593436 100644 --- a/3rd/lua/lstring.c +++ b/3rd/lua/lstring.c @@ -544,8 +544,13 @@ internshrstr (lua_State *L, const char *str, size_t l) { LUA_API void luaS_expandshr(int n) { struct shrmap * s = &SSM; - if (s->n < n) { - ATOM_ADD(&s->n, n); + if (n < 0) { + if (-n > s->n) { + n = -s->n; + } + } + ATOM_ADD(&s->n, n); + if (n > 0) { int t = (s->total + s->n) * 5 / 4; if (t > s->mask) { shrstr_expandpage(t);