aboutsummaryrefslogtreecommitdiff
path: root/lgc.c
diff options
context:
space:
mode:
authorRoberto Ierusalimschy <roberto@inf.puc-rio.br>2023-12-22 14:48:07 -0300
committerRoberto Ierusalimschy <roberto@inf.puc-rio.br>2023-12-22 14:48:07 -0300
commite2cc179454c6aa6cde5f98954bd3783e0d5d53a3 (patch)
tree1770fb2eded15ad53211693b19eb2a8698cbf192 /lgc.c
parentad0ea7813b39e76b377983138ca995189e22054f (diff)
downloadlua-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.c16
1 files changed, 8 insertions, 8 deletions
diff --git a/lgc.c b/lgc.c
index 149dddf6..bc4ddb0b 100644
--- a/lgc.c
+++ b/lgc.c
@@ -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*/
1051static void setpause (global_State *g) { 1051static 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*/
1257static int checkminormajor (lua_State *L, global_State *g, l_obj addedold1) { 1257static 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*/
1349static void setminordebt (global_State *g) { 1349static 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*/
1636static void incstep (lua_State *L, global_State *g) { 1636static 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 */