aboutsummaryrefslogtreecommitdiff
path: root/lapi.c
diff options
context:
space:
mode:
authorRoberto Ierusalimschy <roberto@inf.puc-rio.br>2010-04-29 14:31:31 -0300
committerRoberto Ierusalimschy <roberto@inf.puc-rio.br>2010-04-29 14:31:31 -0300
commit3eb1788bb4236cd983f1230ee14e2adb1b5b3ff5 (patch)
tree6c2c41dd92bacf2dfe266d750b61b28a67198f9a /lapi.c
parent00114a95b2a1234954a46fca6221d1c6922713f8 (diff)
downloadlua-3eb1788bb4236cd983f1230ee14e2adb1b5b3ff5.tar.gz
lua-3eb1788bb4236cd983f1230ee14e2adb1b5b3ff5.tar.bz2
lua-3eb1788bb4236cd983f1230ee14e2adb1b5b3ff5.zip
new way to control GC speed (keeping a 'debt' counter)
Diffstat (limited to 'lapi.c')
-rw-r--r--lapi.c14
1 files changed, 7 insertions, 7 deletions
diff --git a/lapi.c b/lapi.c
index e29db1c3..766878d7 100644
--- a/lapi.c
+++ b/lapi.c
@@ -1,5 +1,5 @@
1/* 1/*
2** $Id: lapi.c,v 2.123 2010/04/19 16:33:19 roberto Exp roberto $ 2** $Id: lapi.c,v 2.124 2010/04/20 20:14:50 roberto Exp roberto $
3** Lua API 3** Lua API
4** See Copyright Notice in lua.h 4** See Copyright Notice in lua.h
5*/ 5*/
@@ -913,11 +913,11 @@ LUA_API int lua_gc (lua_State *L, int what, int data) {
913 g = G(L); 913 g = G(L);
914 switch (what) { 914 switch (what) {
915 case LUA_GCSTOP: { 915 case LUA_GCSTOP: {
916 g->GCthreshold = MAX_LUMEM; 916 stopgc(g);
917 break; 917 break;
918 } 918 }
919 case LUA_GCRESTART: { 919 case LUA_GCRESTART: {
920 g->GCthreshold = g->totalbytes; 920 g->GCdebt = 0;
921 break; 921 break;
922 } 922 }
923 case LUA_GCCOLLECT: { 923 case LUA_GCCOLLECT: {
@@ -934,7 +934,7 @@ LUA_API int lua_gc (lua_State *L, int what, int data) {
934 break; 934 break;
935 } 935 }
936 case LUA_GCSTEP: { 936 case LUA_GCSTEP: {
937 lu_mem oldts = g->GCthreshold; 937 int stopped = gcstopped(g);
938 if (g->gckind == KGC_GEN) { /* generational mode? */ 938 if (g->gckind == KGC_GEN) { /* generational mode? */
939 res = (g->lastmajormem == 0); /* 1 if will do major collection */ 939 res = (g->lastmajormem == 0); /* 1 if will do major collection */
940 luaC_step(L); /* do a single step */ 940 luaC_step(L); /* do a single step */
@@ -948,8 +948,8 @@ LUA_API int lua_gc (lua_State *L, int what, int data) {
948 } 948 }
949 } 949 }
950 } 950 }
951 if (oldts == MAX_LUMEM) /* collector was stopped? */ 951 if (stopped) /* collector was stopped? */
952 g->GCthreshold = oldts; /* keep it that way */ 952 stopgc(g); /* keep it that way */
953 break; 953 break;
954 } 954 }
955 case LUA_GCSETPAUSE: { 955 case LUA_GCSETPAUSE: {
@@ -963,7 +963,7 @@ LUA_API int lua_gc (lua_State *L, int what, int data) {
963 break; 963 break;
964 } 964 }
965 case LUA_GCISRUNNING: { 965 case LUA_GCISRUNNING: {
966 res = (g->GCthreshold != MAX_LUMEM); 966 res = !gcstopped(g);
967 break; 967 break;
968 } 968 }
969 case LUA_GCGEN: { /* change collector to generational mode */ 969 case LUA_GCGEN: { /* change collector to generational mode */