MCPcopy Create free account
hub / github.com/Serial-Studio/Serial-Studio / stepgenfull

Function stepgenfull

lib/lua/src/lgc.c:1402–1420  ·  view source on GitHub ↗

** Does a major collection after last collection was a "bad collection". ** ** When the program is building a big structure, it allocates lots of ** memory but generates very little garbage. In those scenarios, ** the generational mode just wastes time doing small collections, and ** major collections are frequently what we call a "bad collection", a ** collection that frees too few objects. To av

Source from the content-addressed store, hash-verified

1400** ('g->lastatomic != 0' also means that the last collection was bad.)
1401*/
1402static void stepgenfull (lua_State *L, global_State *g) {
1403 lu_mem newatomic; /* count of traversed objects */
1404 lu_mem lastatomic = g->lastatomic; /* count from last collection */
1405 if (g->gckind == KGC_GEN) /* still in generational mode? */
1406 enterinc(g); /* enter incremental mode */
1407 luaC_runtilstate(L, bitmask(GCSpropagate)); /* start new cycle */
1408 newatomic = atomic(L); /* mark everybody */
1409 if (newatomic < lastatomic + (lastatomic >> 3)) { /* good collection? */
1410 atomic2gen(L, g); /* return to generational mode */
1411 setminordebt(g);
1412 }
1413 else { /* another bad collection; stay in incremental mode */
1414 g->GCestimate = gettotalbytes(g); /* first estimate */
1415 entersweep(L);
1416 luaC_runtilstate(L, bitmask(GCSpause)); /* finish collection */
1417 setpause(g);
1418 g->lastatomic = newatomic;
1419 }
1420}
1421
1422
1423/*

Callers 1

genstepFunction · 0.85

Calls 7

enterincFunction · 0.85
luaC_runtilstateFunction · 0.85
atomicFunction · 0.85
atomic2genFunction · 0.85
setminordebtFunction · 0.85
entersweepFunction · 0.85
setpauseFunction · 0.85

Tested by

no test coverage detected