Revamp of GC parameters

More uniformity when handling GC parameters + avoid divisions by 100
when applying them.
This commit is contained in:
Roberto Ierusalimschy
2022-12-13 11:55:14 -03:00
parent ff106c028c
commit 40565b4a08
6 changed files with 61 additions and 41 deletions

30
lapi.c
View File

@@ -1185,15 +1185,15 @@ LUA_API int lua_gc (lua_State *L, int what, ...) {
break;
}
case LUA_GCSETPAUSE: {
int data = va_arg(argp, int);
res = getgcparam(g->gcpause);
setgcparam(g->gcpause, data);
unsigned int data = va_arg(argp, unsigned int);
res = applygcparam(g, gcpause, 100);
setgcparam(g, gcpause, data);
break;
}
case LUA_GCSETSTEPMUL: {
int data = va_arg(argp, int);
res = getgcparam(g->gcstepmul);
setgcparam(g->gcstepmul, data);
unsigned int data = va_arg(argp, unsigned int);
res = applygcparam(g, gcstepmul, 100);
setgcparam(g, gcstepmul, data);
break;
}
case LUA_GCISRUNNING: {
@@ -1201,25 +1201,25 @@ LUA_API int lua_gc (lua_State *L, int what, ...) {
break;
}
case LUA_GCGEN: {
int minormul = va_arg(argp, int);
int majormul = va_arg(argp, int);
unsigned int minormul = va_arg(argp, unsigned int);
unsigned int majormul = va_arg(argp, unsigned int);
res = (g->gckind == KGC_INC) ? LUA_GCINC : LUA_GCGEN;
if (minormul != 0)
g->genminormul = minormul;
setgcparam(g, genminormul, minormul);
if (majormul != 0)
setgcparam(g->genmajormul, majormul);
setgcparam(g, genmajormul, majormul);
luaC_changemode(L, KGC_GEN);
break;
}
case LUA_GCINC: {
int pause = va_arg(argp, int);
int stepmul = va_arg(argp, int);
int stepsize = va_arg(argp, int);
unsigned int pause = va_arg(argp, unsigned int);
unsigned int stepmul = va_arg(argp, unsigned int);
unsigned int stepsize = va_arg(argp, unsigned int);
res = (g->gckind == KGC_INC) ? LUA_GCINC : LUA_GCGEN;
if (pause != 0)
setgcparam(g->gcpause, pause);
setgcparam(g, gcpause, pause);
if (stepmul != 0)
setgcparam(g->gcstepmul, stepmul);
setgcparam(g, gcstepmul, stepmul);
if (stepsize != 0)
g->gcstepsize = (stepsize <= log2maxs(l_obj)) ? stepsize
: log2maxs(l_obj);