MCPcopy Create free account
hub / github.com/Snapchat/KeyDB / lua_gc

Function lua_gc

deps/lua/src/lapi.c:899–955  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

897*/
898
899LUA_API int lua_gc (lua_State *L, int what, int data) {
900 int res = 0;
901 global_State *g;
902 lua_lock(L);
903 g = G(L);
904 switch (what) {
905 case LUA_GCSTOP: {
906 g->GCthreshold = MAX_LUMEM;
907 break;
908 }
909 case LUA_GCRESTART: {
910 g->GCthreshold = g->totalbytes;
911 break;
912 }
913 case LUA_GCCOLLECT: {
914 luaC_fullgc(L);
915 break;
916 }
917 case LUA_GCCOUNT: {
918 /* GC values are expressed in Kbytes: #bytes/2^10 */
919 res = cast_int(g->totalbytes >> 10);
920 break;
921 }
922 case LUA_GCCOUNTB: {
923 res = cast_int(g->totalbytes & 0x3ff);
924 break;
925 }
926 case LUA_GCSTEP: {
927 lu_mem a = (cast(lu_mem, data) << 10);
928 if (a <= g->totalbytes)
929 g->GCthreshold = g->totalbytes - a;
930 else
931 g->GCthreshold = 0;
932 while (g->GCthreshold <= g->totalbytes) {
933 luaC_step(L);
934 if (g->gcstate == GCSpause) { /* end of cycle? */
935 res = 1; /* signal it */
936 break;
937 }
938 }
939 break;
940 }
941 case LUA_GCSETPAUSE: {
942 res = g->gcpause;
943 g->gcpause = data;
944 break;
945 }
946 case LUA_GCSETSTEPMUL: {
947 res = g->gcstepmul;
948 g->gcstepmul = data;
949 break;
950 }
951 default: res = -1; /* invalid option */
952 }
953 lua_unlock(L);
954 return res;
955}
956

Callers 6

cronUpdateMemoryStatsFunction · 0.85
genRedisInfoStringFunction · 0.85
evalGenericCommandFunction · 0.85
docallFunction · 0.85
pmainFunction · 0.85
luaB_collectgarbageFunction · 0.85

Calls 2

luaC_fullgcFunction · 0.85
luaC_stepFunction · 0.85

Tested by

no test coverage detected