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: