From 2c32bff60987d38a60a58d4f0123f3783da60a63 Mon Sep 17 00:00:00 2001 From: Roberto Ierusalimschy Date: Wed, 30 Jan 2019 11:44:42 -0200 Subject: After a "bad collections", avoid switching back back to generational After a major bad collection (one that collects too few objects), next collection will be major again. In that case, avoid switching back to generational mode (as it will have to switch again to incremental to do next major collection). --- lapi.c | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) (limited to 'lapi.c') diff --git a/lapi.c b/lapi.c index 8ff7bfbd..4026497e 100644 --- a/lapi.c +++ b/lapi.c @@ -1141,22 +1141,21 @@ LUA_API int lua_gc (lua_State *L, int what, ...) { break; } case LUA_GCGEN: { - int oldmode = g->gckind; int minormul = va_arg(argp, int); int majormul = va_arg(argp, int); + res = isdecGCmodegen(g) ? LUA_GCGEN : LUA_GCINC; if (minormul != 0) g->genminormul = minormul; if (majormul != 0) setgcparam(g->genmajormul, majormul); luaC_changemode(L, KGC_GEN); - res = (oldmode == KGC_GEN) ? LUA_GCGEN : LUA_GCINC; break; } case LUA_GCINC: { - int oldmode = g->gckind; int pause = va_arg(argp, int); int stepmul = va_arg(argp, int); int stepsize = va_arg(argp, int); + res = isdecGCmodegen(g) ? LUA_GCGEN : LUA_GCINC; if (pause != 0) setgcparam(g->gcpause, pause); if (stepmul != 0) @@ -1164,7 +1163,6 @@ LUA_API int lua_gc (lua_State *L, int what, ...) { if (stepsize != 0) g->gcstepsize = stepsize; luaC_changemode(L, KGC_INC); - res = (oldmode == KGC_GEN) ? LUA_GCGEN : LUA_GCINC; break; } default: res = -1; /* invalid option */ -- cgit v1.2.3-55-g6feb