diff --git a/3rd/lua/lstring.c b/3rd/lua/lstring.c index 3a646d04..34feb0f6 100644 --- a/3rd/lua/lstring.c +++ b/3rd/lua/lstring.c @@ -75,7 +75,6 @@ void luaS_clearcache (global_State *g) { int i, j; for (i = 0; i < STRCACHE_N; i++) for (j = 0; j < STRCACHE_M; j++) { - if (!isshared(g->strcache[i][j]) && iswhite(g->strcache[i][j])) /* will entry be collected? */ g->strcache[i][j] = g->memerrmsg; /* replace it with something fixed */ } } @@ -936,6 +935,7 @@ new_string(unsigned int h, const char *str, lu_byte l) { memset(ts, 0, sz); setbits(ts->marked, WHITEBITS); gray2black(ts); + makeshared(ts); ts->tt = LUA_TSHRSTR; ts->hash = h; ts->shrlen = l; diff --git a/lualib-src/lua-sharetable.c b/lualib-src/lua-sharetable.c index 68a224d4..7b6c2671 100644 --- a/lualib-src/lua-sharetable.c +++ b/lualib-src/lua-sharetable.c @@ -47,8 +47,7 @@ mark_shared(lua_State *L) { case LUA_TSTRING: { const char *str = lua_tostring(L, idx); TString *ts = (TString *)(str - sizeof(UTString)); - if(ts->tt==LUA_TLNGSTR) - makeshared(ts); + makeshared(ts); break; } default: