diff options
author | Roberto Ierusalimschy <roberto@inf.puc-rio.br> | 2023-12-22 14:48:07 -0300 |
---|---|---|
committer | Roberto Ierusalimschy <roberto@inf.puc-rio.br> | 2023-12-22 14:48:07 -0300 |
commit | e2cc179454c6aa6cde5f98954bd3783e0d5d53a3 (patch) | |
tree | 1770fb2eded15ad53211693b19eb2a8698cbf192 /lgc.c | |
parent | ad0ea7813b39e76b377983138ca995189e22054f (diff) | |
download | lua-e2cc179454c6aa6cde5f98954bd3783e0d5d53a3.tar.gz lua-e2cc179454c6aa6cde5f98954bd3783e0d5d53a3.tar.bz2 lua-e2cc179454c6aa6cde5f98954bd3783e0d5d53a3.zip |
New option "setparms" for 'collectgarbage'
The generational mode also uses the parameters for the incremental
mode in its major collections, so it should be easy to change those
parameters without having to change the GC mode.
Diffstat (limited to 'lgc.c')
-rw-r--r-- | lgc.c | 16 |
1 files changed, 8 insertions, 8 deletions
@@ -1049,7 +1049,7 @@ void luaC_checkfinalizer (lua_State *L, GCObject *o, Table *mt) { | |||
1049 | ** approximately (marked * pause / 100). | 1049 | ** approximately (marked * pause / 100). |
1050 | */ | 1050 | */ |
1051 | static void setpause (global_State *g) { | 1051 | static void setpause (global_State *g) { |
1052 | l_obj threshold = luaO_applyparam(g->gcppause, g->marked); | 1052 | l_obj threshold = applygcparam(g, PAUSE, g->marked); |
1053 | l_obj debt = threshold - gettotalobjs(g); | 1053 | l_obj debt = threshold - gettotalobjs(g); |
1054 | if (debt < 0) debt = 0; | 1054 | if (debt < 0) debt = 0; |
1055 | luaE_setdebt(g, debt); | 1055 | luaE_setdebt(g, debt); |
@@ -1239,7 +1239,7 @@ static void minor2inc (lua_State *L, global_State *g, int kind) { | |||
1239 | g->finobjrold = g->finobjold1 = g->finobjsur = NULL; | 1239 | g->finobjrold = g->finobjold1 = g->finobjsur = NULL; |
1240 | entersweep(L); /* continue as an incremental cycle */ | 1240 | entersweep(L); /* continue as an incremental cycle */ |
1241 | /* set a debt equal to the step size */ | 1241 | /* set a debt equal to the step size */ |
1242 | luaE_setdebt(g, luaO_applyparam(g->gcpstepsize, 100)); | 1242 | luaE_setdebt(g, applygcparam(g, STEPSIZE, 100)); |
1243 | } | 1243 | } |
1244 | 1244 | ||
1245 | 1245 | ||
@@ -1255,8 +1255,8 @@ static void minor2inc (lua_State *L, global_State *g, int kind) { | |||
1255 | ** major collection. (That percentage is computed in 'limit'.) | 1255 | ** major collection. (That percentage is computed in 'limit'.) |
1256 | */ | 1256 | */ |
1257 | static int checkminormajor (lua_State *L, global_State *g, l_obj addedold1) { | 1257 | static int checkminormajor (lua_State *L, global_State *g, l_obj addedold1) { |
1258 | l_obj step = luaO_applyparam(g->gcpgenminormul, g->GCmajorminor); | 1258 | l_obj step = applygcparam(g, MINORMUL, g->GCmajorminor); |
1259 | l_obj limit = luaO_applyparam(g->gcpminormajor, g->GCmajorminor); | 1259 | l_obj limit = applygcparam(g, MINORMAJOR, g->GCmajorminor); |
1260 | //printf("-> major? %ld %ld %ld %ld (%ld)\n", g->marked, limit, step, addedold1, gettotalobjs(g)); | 1260 | //printf("-> major? %ld %ld %ld %ld (%ld)\n", g->marked, limit, step, addedold1, gettotalobjs(g)); |
1261 | if (addedold1 >= (step >> 1) || g->marked >= limit) { | 1261 | if (addedold1 >= (step >> 1) || g->marked >= limit) { |
1262 | minor2inc(L, g, KGC_GENMAJOR); /* go to major mode */ | 1262 | minor2inc(L, g, KGC_GENMAJOR); /* go to major mode */ |
@@ -1347,7 +1347,7 @@ static void atomic2gen (lua_State *L, global_State *g) { | |||
1347 | ** total number of objects grows 'genminormul'%. | 1347 | ** total number of objects grows 'genminormul'%. |
1348 | */ | 1348 | */ |
1349 | static void setminordebt (global_State *g) { | 1349 | static void setminordebt (global_State *g) { |
1350 | luaE_setdebt(g, luaO_applyparam(g->gcpgenminormul, g->GCmajorminor)); | 1350 | luaE_setdebt(g, applygcparam(g, MINORMUL, g->GCmajorminor)); |
1351 | } | 1351 | } |
1352 | 1352 | ||
1353 | 1353 | ||
@@ -1404,7 +1404,7 @@ static int checkmajorminor (lua_State *L, global_State *g) { | |||
1404 | if (g->gckind == KGC_GENMAJOR) { | 1404 | if (g->gckind == KGC_GENMAJOR) { |
1405 | l_obj numobjs = gettotalobjs(g); | 1405 | l_obj numobjs = gettotalobjs(g); |
1406 | l_obj addedobjs = numobjs - g->GCmajorminor; | 1406 | l_obj addedobjs = numobjs - g->GCmajorminor; |
1407 | l_obj limit = luaO_applyparam(g->gcpmajorminor, addedobjs); | 1407 | l_obj limit = applygcparam(g, MAJORMINOR, addedobjs); |
1408 | l_obj tobecollected = numobjs - g->marked; | 1408 | l_obj tobecollected = numobjs - g->marked; |
1409 | //printf("-> minor? %ld %ld %ld\n", tobecollected, limit, numobjs); | 1409 | //printf("-> minor? %ld %ld %ld\n", tobecollected, limit, numobjs); |
1410 | if (tobecollected > limit) { | 1410 | if (tobecollected > limit) { |
@@ -1634,8 +1634,8 @@ void luaC_runtilstate (lua_State *L, int state, int fast) { | |||
1634 | ** controls when next step will be performed. | 1634 | ** controls when next step will be performed. |
1635 | */ | 1635 | */ |
1636 | static void incstep (lua_State *L, global_State *g) { | 1636 | static void incstep (lua_State *L, global_State *g) { |
1637 | l_obj stepsize = luaO_applyparam(g->gcpstepsize, 100); | 1637 | l_obj stepsize = applygcparam(g, STEPSIZE, 100); |
1638 | l_obj work2do = luaO_applyparam(g->gcpstepmul, stepsize); | 1638 | l_obj work2do = applygcparam(g, STEPMUL, stepsize); |
1639 | int fast = 0; | 1639 | int fast = 0; |
1640 | if (work2do == 0) { /* special case: do a full collection */ | 1640 | if (work2do == 0) { /* special case: do a full collection */ |
1641 | work2do = MAX_LOBJ; /* do unlimited work */ | 1641 | work2do = MAX_LOBJ; /* do unlimited work */ |