diff options
| author | Roberto Ierusalimschy <roberto@inf.puc-rio.br> | 2022-11-23 17:17:20 -0300 |
|---|---|---|
| committer | Roberto Ierusalimschy <roberto@inf.puc-rio.br> | 2022-11-23 17:17:20 -0300 |
| commit | f356d5acdd9d8e8f7e9d1d7632c4657f945ff4f4 (patch) | |
| tree | baa2abdc9bd4707b42c0609da42aa1130757273b /lapi.c | |
| parent | 76953316d1283ab6324b59b914ef53a521408444 (diff) | |
| download | lua-f356d5acdd9d8e8f7e9d1d7632c4657f945ff4f4.tar.gz lua-f356d5acdd9d8e8f7e9d1d7632c4657f945ff4f4.tar.bz2 lua-f356d5acdd9d8e8f7e9d1d7632c4657f945ff4f4.zip | |
First version of GC counting objects for control
Still needs to review generational mode.
Diffstat (limited to 'lapi.c')
| -rw-r--r-- | lapi.c | 9 |
1 files changed, 5 insertions, 4 deletions
| @@ -1154,11 +1154,11 @@ LUA_API int lua_gc (lua_State *L, int what, ...) { | |||
| 1154 | } | 1154 | } |
| 1155 | case LUA_GCCOUNT: { | 1155 | case LUA_GCCOUNT: { |
| 1156 | /* GC values are expressed in Kbytes: #bytes/2^10 */ | 1156 | /* GC values are expressed in Kbytes: #bytes/2^10 */ |
| 1157 | res = cast_int(gettotalbytes(g) >> 10); | 1157 | res = cast_int(g->totalbytes >> 10); |
| 1158 | break; | 1158 | break; |
| 1159 | } | 1159 | } |
| 1160 | case LUA_GCCOUNTB: { | 1160 | case LUA_GCCOUNTB: { |
| 1161 | res = cast_int(gettotalbytes(g) & 0x3ff); | 1161 | res = cast_int(g->totalbytes & 0x3ff); |
| 1162 | break; | 1162 | break; |
| 1163 | } | 1163 | } |
| 1164 | case LUA_GCSTEP: { | 1164 | case LUA_GCSTEP: { |
| @@ -1171,7 +1171,7 @@ LUA_API int lua_gc (lua_State *L, int what, ...) { | |||
| 1171 | luaC_step(L); | 1171 | luaC_step(L); |
| 1172 | } | 1172 | } |
| 1173 | else { /* add 'data' to total debt */ | 1173 | else { /* add 'data' to total debt */ |
| 1174 | debt = cast(l_mem, data) * 1024 + g->GCdebt; | 1174 | debt = data + g->GCdebt; |
| 1175 | luaE_setdebt(g, debt); | 1175 | luaE_setdebt(g, debt); |
| 1176 | luaC_checkGC(L); | 1176 | luaC_checkGC(L); |
| 1177 | } | 1177 | } |
| @@ -1217,7 +1217,8 @@ LUA_API int lua_gc (lua_State *L, int what, ...) { | |||
| 1217 | if (stepmul != 0) | 1217 | if (stepmul != 0) |
| 1218 | setgcparam(g->gcstepmul, stepmul); | 1218 | setgcparam(g->gcstepmul, stepmul); |
| 1219 | if (stepsize != 0) | 1219 | if (stepsize != 0) |
| 1220 | g->gcstepsize = stepsize; | 1220 | g->gcstepsize = (stepsize <= log2maxs(l_mem)) ? stepsize |
| 1221 | : log2maxs(l_mem); | ||
| 1221 | luaC_changemode(L, KGC_INC); | 1222 | luaC_changemode(L, KGC_INC); |
| 1222 | break; | 1223 | break; |
| 1223 | } | 1224 | } |
