From 9a6d9ea57a41c046b135281ee574e7d877d359c9 Mon Sep 17 00:00:00 2001 From: Roberto Ierusalimschy Date: Mon, 23 Nov 2009 12:59:30 -0200 Subject: [PATCH] GC may get stuck during a parser and avoids proper resizing of the string table, making its lists grow too much and degrading performance. --- bugs | 29 +++++++++++++++++++++++++++-- 1 file changed, 27 insertions(+), 2 deletions(-) diff --git a/bugs b/bugs index f57a9dd4..d82bedfd 100644 --- a/bugs +++ b/bugs @@ -1880,8 +1880,8 @@ patch = [[ +++ lundump.c 2008/04/04 19:51:41 2.7.1.4 @@ -1,5 +1,5 @@ /* --** $Id: bugs,v 1.103 2009/08/04 18:51:19 roberto Exp roberto $ -+** $Id: bugs,v 1.103 2009/08/04 18:51:19 roberto Exp roberto $ +-** $Id: bugs,v 1.104 2009/08/05 13:09:38 roberto Exp roberto $ ++** $Id: bugs,v 1.104 2009/08/05 13:09:38 roberto Exp roberto $ ** load precompiled Lua chunks ** See Copyright Notice in lua.h */ @@ -2232,3 +2232,28 @@ patch = [[ ]], } +Bug{ +what = [[GC may get stuck during a parser and avoids proper resizing of +the string table, +making its lists grow too much and degrading performance]], +report = [[Sean Conner, 2009/11/10]], +since = [[5.1]], +example = [[See http://lua-users.org/lists/lua-l/2009-11/msg00463.html]], +patch = [[ +--- llex.c 2007/12/27 13:02:25 2.20.1.1 ++++ llex.c 2009/11/23 14:49:40 +@@ -118,8 +118,10 @@ + lua_State *L = ls->L; + TString *ts = luaS_newlstr(L, str, l); + TValue *o = luaH_setstr(L, ls->fs->h, ts); /* entry for `str' */ +- if (ttisnil(o)) ++ if (ttisnil(o)) { + setbvalue(o, 1); /* make sure `str' will not be collected */ ++ luaC_checkGC(L); ++ } + return ts; + } + +]] +} +