diff options
author | Roberto Ierusalimschy <roberto@inf.puc-rio.br> | 2009-11-23 12:59:30 -0200 |
---|---|---|
committer | Roberto Ierusalimschy <roberto@inf.puc-rio.br> | 2009-11-23 12:59:30 -0200 |
commit | 9a6d9ea57a41c046b135281ee574e7d877d359c9 (patch) | |
tree | 04cf61a40ce4f39f5d2e3ef913cdb35c37782657 | |
parent | 062e809e542ec066986c4e3e054f95e1bfc0cb50 (diff) | |
download | lua-9a6d9ea57a41c046b135281ee574e7d877d359c9.tar.gz lua-9a6d9ea57a41c046b135281ee574e7d877d359c9.tar.bz2 lua-9a6d9ea57a41c046b135281ee574e7d877d359c9.zip |
GC may get stuck during a parser and avoids proper resizing of the
string table, making its lists grow too much and degrading performance.
-rw-r--r-- | bugs | 29 |
1 files changed, 27 insertions, 2 deletions
@@ -1880,8 +1880,8 @@ patch = [[ | |||
1880 | +++ lundump.c 2008/04/04 19:51:41 2.7.1.4 | 1880 | +++ lundump.c 2008/04/04 19:51:41 2.7.1.4 |
1881 | @@ -1,5 +1,5 @@ | 1881 | @@ -1,5 +1,5 @@ |
1882 | /* | 1882 | /* |
1883 | -** $Id: bugs,v 1.103 2009/08/04 18:51:19 roberto Exp roberto $ | 1883 | -** $Id: bugs,v 1.104 2009/08/05 13:09:38 roberto Exp roberto $ |
1884 | +** $Id: bugs,v 1.103 2009/08/04 18:51:19 roberto Exp roberto $ | 1884 | +** $Id: bugs,v 1.104 2009/08/05 13:09:38 roberto Exp roberto $ |
1885 | ** load precompiled Lua chunks | 1885 | ** load precompiled Lua chunks |
1886 | ** See Copyright Notice in lua.h | 1886 | ** See Copyright Notice in lua.h |
1887 | */ | 1887 | */ |
@@ -2232,3 +2232,28 @@ patch = [[ | |||
2232 | ]], | 2232 | ]], |
2233 | } | 2233 | } |
2234 | 2234 | ||
2235 | Bug{ | ||
2236 | what = [[GC may get stuck during a parser and avoids proper resizing of | ||
2237 | the string table, | ||
2238 | making its lists grow too much and degrading performance]], | ||
2239 | report = [[Sean Conner, 2009/11/10]], | ||
2240 | since = [[5.1]], | ||
2241 | example = [[See http://lua-users.org/lists/lua-l/2009-11/msg00463.html]], | ||
2242 | patch = [[ | ||
2243 | --- llex.c 2007/12/27 13:02:25 2.20.1.1 | ||
2244 | +++ llex.c 2009/11/23 14:49:40 | ||
2245 | @@ -118,8 +118,10 @@ | ||
2246 | lua_State *L = ls->L; | ||
2247 | TString *ts = luaS_newlstr(L, str, l); | ||
2248 | TValue *o = luaH_setstr(L, ls->fs->h, ts); /* entry for `str' */ | ||
2249 | - if (ttisnil(o)) | ||
2250 | + if (ttisnil(o)) { | ||
2251 | setbvalue(o, 1); /* make sure `str' will not be collected */ | ||
2252 | + luaC_checkGC(L); | ||
2253 | + } | ||
2254 | return ts; | ||
2255 | } | ||
2256 | |||
2257 | ]] | ||
2258 | } | ||
2259 | |||