MCPcopy Create free account
hub / github.com/F-Stack/f-stack / singlestep

Function singlestep

freebsd/contrib/openzfs/module/lua/lgc.c:1039–1102  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1037
1038
1039static lu_mem singlestep (lua_State *L) {
1040 global_State *g = G(L);
1041 switch (g->gcstate) {
1042 case GCSpause: {
1043 /* start to count memory traversed */
1044 g->GCmemtrav = g->strt.size * sizeof(GCObject*);
1045 lua_assert(!isgenerational(g));
1046 restartcollection(g);
1047 g->gcstate = GCSpropagate;
1048 return g->GCmemtrav;
1049 }
1050 case GCSpropagate: {
1051 if (g->gray) {
1052 lu_mem oldtrav = g->GCmemtrav;
1053 propagatemark(g);
1054 return g->GCmemtrav - oldtrav; /* memory traversed in this step */
1055 }
1056 else { /* no more `gray' objects */
1057 lu_mem work;
1058 int sw;
1059 g->gcstate = GCSatomic; /* finish mark phase */
1060 g->GCestimate = g->GCmemtrav; /* save what was counted */;
1061 work = atomic(L); /* add what was traversed by 'atomic' */
1062 g->GCestimate += work; /* estimate of total memory traversed */
1063 sw = entersweep(L);
1064 return work + sw * GCSWEEPCOST;
1065 }
1066 }
1067 case GCSsweepstring: {
1068 int i;
1069 for (i = 0; i < GCSWEEPMAX && g->sweepstrgc + i < g->strt.size; i++)
1070 sweepwholelist(L, &g->strt.hash[g->sweepstrgc + i]);
1071 g->sweepstrgc += i;
1072 if (g->sweepstrgc >= g->strt.size) /* no more strings to sweep? */
1073 g->gcstate = GCSsweepudata;
1074 return i * GCSWEEPCOST;
1075 }
1076 case GCSsweepudata: {
1077 if (g->sweepfin) {
1078 g->sweepfin = sweeplist(L, g->sweepfin, GCSWEEPMAX);
1079 return GCSWEEPMAX*GCSWEEPCOST;
1080 }
1081 else {
1082 g->gcstate = GCSsweep;
1083 return 0;
1084 }
1085 }
1086 case GCSsweep: {
1087 if (g->sweepgc) {
1088 g->sweepgc = sweeplist(L, g->sweepgc, GCSWEEPMAX);
1089 return GCSWEEPMAX*GCSWEEPCOST;
1090 }
1091 else {
1092 /* sweep main thread */
1093 GCObject *mt = obj2gco(g->mainthread);
1094 sweeplist(L, &mt, 1);
1095 checkSizes(L);
1096 g->gcstate = GCSpause; /* finish collection */

Callers 2

luaC_runtilstateFunction · 0.70
incstepFunction · 0.70

Calls 6

restartcollectionFunction · 0.85
entersweepFunction · 0.85
propagatemarkFunction · 0.70
atomicFunction · 0.70
sweeplistFunction · 0.70
checkSizesFunction · 0.70

Tested by

no test coverage detected