aboutsummaryrefslogtreecommitdiff
path: root/lgc.c
diff options
context:
space:
mode:
authorRoberto Ierusalimschy <roberto@inf.puc-rio.br>2023-12-20 16:25:20 -0300
committerRoberto Ierusalimschy <roberto@inf.puc-rio.br>2023-12-20 16:25:20 -0300
commitad0ea7813b39e76b377983138ca995189e22054f (patch)
tree087e3585a4b4bf5ae65f56b9599bbff9c361a123 /lgc.c
parent666e95a66d1a2ceb98bdf320980b3f655264a9c9 (diff)
downloadlua-ad0ea7813b39e76b377983138ca995189e22054f.tar.gz
lua-ad0ea7813b39e76b377983138ca995189e22054f.tar.bz2
lua-ad0ea7813b39e76b377983138ca995189e22054f.zip
GC parameters encoded as floating-point bytes
This encoding brings more precision and a larger range for these parameters.
Diffstat (limited to 'lgc.c')
-rw-r--r--lgc.c18
1 files changed, 9 insertions, 9 deletions
diff --git a/lgc.c b/lgc.c
index 114b32d3..149dddf6 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 = applygcparam(g, gcpause, g->marked); 1052 l_obj threshold = luaO_applyparam(g->gcppause, 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);
@@ -1233,13 +1233,13 @@ static void finishgencycle (lua_State *L, global_State *g) {
1233** in generational mode. 1233** in generational mode.
1234*/ 1234*/
1235static void minor2inc (lua_State *L, global_State *g, int kind) { 1235static void minor2inc (lua_State *L, global_State *g, int kind) {
1236 l_obj stepsize = cast(l_obj, 1) << g->gcstepsize;
1237 g->GCmajorminor = g->marked; /* number of live objects */ 1236 g->GCmajorminor = g->marked; /* number of live objects */
1238 g->gckind = kind; 1237 g->gckind = kind;
1239 g->reallyold = g->old1 = g->survival = NULL; 1238 g->reallyold = g->old1 = g->survival = NULL;
1240 g->finobjrold = g->finobjold1 = g->finobjsur = NULL; 1239 g->finobjrold = g->finobjold1 = g->finobjsur = NULL;
1241 entersweep(L); /* continue as an incremental cycle */ 1240 entersweep(L); /* continue as an incremental cycle */
1242 luaE_setdebt(g, stepsize); 1241 /* set a debt equal to the step size */
1242 luaE_setdebt(g, luaO_applyparam(g->gcpstepsize, 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 = applygcparam(g, genminormul, g->GCmajorminor); 1258 l_obj step = luaO_applyparam(g->gcpgenminormul, g->GCmajorminor);
1259 l_obj limit = applygcparam(g, minormajor, g->GCmajorminor); 1259 l_obj limit = luaO_applyparam(g->gcpminormajor, 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, applygcparam(g, genminormul, g->GCmajorminor)); 1350 luaE_setdebt(g, luaO_applyparam(g->gcpgenminormul, 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 = applygcparam(g, majorminor, addedobjs); 1407 l_obj limit = luaO_applyparam(g->gcpmajorminor, 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 = cast(l_obj, 1) << g->gcstepsize; 1637 l_obj stepsize = luaO_applyparam(g->gcpstepsize, 100);
1638 l_obj work2do = applygcparam(g, gcstepmul, stepsize); 1638 l_obj work2do = luaO_applyparam(g->gcpstepmul, 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 */