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

Function lua_gc

freebsd/contrib/openzfs/module/lua/lapi.c:1018–1093  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1016*/
1017
1018LUA_API int lua_gc (lua_State *L, int what, int data) {
1019 int res = 0;
1020 global_State *g;
1021 lua_lock(L);
1022 g = G(L);
1023 switch (what) {
1024 case LUA_GCSTOP: {
1025 g->gcrunning = 0;
1026 break;
1027 }
1028 case LUA_GCRESTART: {
1029 luaE_setdebt(g, 0);
1030 g->gcrunning = 1;
1031 break;
1032 }
1033 case LUA_GCCOLLECT: {
1034 luaC_fullgc(L, 0);
1035 break;
1036 }
1037 case LUA_GCCOUNT: {
1038 /* GC values are expressed in Kbytes: #bytes/2^10 */
1039 res = cast_int(gettotalbytes(g) >> 10);
1040 break;
1041 }
1042 case LUA_GCCOUNTB: {
1043 res = cast_int(gettotalbytes(g) & 0x3ff);
1044 break;
1045 }
1046 case LUA_GCSTEP: {
1047 if (g->gckind == KGC_GEN) { /* generational mode? */
1048 res = (g->GCestimate == 0); /* true if it will do major collection */
1049 luaC_forcestep(L); /* do a single step */
1050 }
1051 else {
1052 lu_mem debt = cast(lu_mem, data) * 1024 - GCSTEPSIZE;
1053 if (g->gcrunning)
1054 debt += g->GCdebt; /* include current debt */
1055 luaE_setdebt(g, debt);
1056 luaC_forcestep(L);
1057 if (g->gcstate == GCSpause) /* end of cycle? */
1058 res = 1; /* signal it */
1059 }
1060 break;
1061 }
1062 case LUA_GCSETPAUSE: {
1063 res = g->gcpause;
1064 g->gcpause = data;
1065 break;
1066 }
1067 case LUA_GCSETMAJORINC: {
1068 res = g->gcmajorinc;
1069 g->gcmajorinc = data;
1070 break;
1071 }
1072 case LUA_GCSETSTEPMUL: {
1073 res = g->gcstepmul;
1074 g->gcstepmul = data;
1075 break;

Callers 1

luaB_collectgarbageFunction · 0.70

Calls 4

luaE_setdebtFunction · 0.85
luaC_forcestepFunction · 0.85
luaC_changemodeFunction · 0.85
luaC_fullgcFunction · 0.70

Tested by

no test coverage detected