From 4d88f96ed653c0d68dc22be2a03a87567448ae2d Mon Sep 17 00:00:00 2001 From: Cloud Wu Date: Fri, 18 Dec 2020 19:20:15 +0800 Subject: [PATCH] bugfix: make proto shared --- 3rd/lua/lfunc.c | 2 +- 3rd/lua/lstring.c | 2 +- lualib-src/lua-sharetable.c | 1 + 3 files changed, 3 insertions(+), 2 deletions(-) diff --git a/3rd/lua/lfunc.c b/3rd/lua/lfunc.c index 57b63547..250c85f7 100644 --- a/3rd/lua/lfunc.c +++ b/3rd/lua/lfunc.c @@ -301,7 +301,7 @@ const char *luaF_getlocalname (const Proto *f, int local_number, int pc) { void luaF_shareproto (Proto *f) { int i; - if (f == NULL) + if (f == NULL || isshared(f)) return; makeshared(f); luaS_share(f->source); diff --git a/3rd/lua/lstring.c b/3rd/lua/lstring.c index 935e96a3..195534ac 100644 --- a/3rd/lua/lstring.c +++ b/3rd/lua/lstring.c @@ -57,7 +57,7 @@ int luaS_eqshrstr (TString *a, TString *b) { } void luaS_share (TString *ts) { - if (ts == NULL) + if (ts == NULL || isshared(ts)) return; makeshared(ts); ts->id = ATOM_DEC(&STRID); diff --git a/lualib-src/lua-sharetable.c b/lualib-src/lua-sharetable.c index 185a5e85..8a84e7bf 100644 --- a/lualib-src/lua-sharetable.c +++ b/lualib-src/lua-sharetable.c @@ -41,6 +41,7 @@ mark_shared(lua_State *L) { } else if (!lua_iscfunction(L, idx)) { LClosure *f = (LClosure *)lua_topointer(L, idx); makeshared(f); + lua_sharefunction(L, idx); } break; case LUA_TSTRING: