diff options
| author | Roberto Ierusalimschy <roberto@inf.puc-rio.br> | 2017-04-12 15:01:40 -0300 |
|---|---|---|
| committer | Roberto Ierusalimschy <roberto@inf.puc-rio.br> | 2017-04-12 15:01:40 -0300 |
| commit | 16001acb15456c832474edc9f0323e0238e28a11 (patch) | |
| tree | c5f40e06b3e4dcf27e9df5bef20c4998befd4319 | |
| parent | 0c8a7e071b00a1ea9822101f3b9fe4392d05c3c6 (diff) | |
| download | lua-16001acb15456c832474edc9f0323e0238e28a11.tar.gz lua-16001acb15456c832474edc9f0323e0238e28a11.tar.bz2 lua-16001acb15456c832474edc9f0323e0238e28a11.zip | |
small corrections + removal of debugging functions 'count' and
'printgray'.
| -rw-r--r-- | lgc.c | 52 |
1 files changed, 4 insertions, 48 deletions
| @@ -1,5 +1,5 @@ | |||
| 1 | /* | 1 | /* |
| 2 | ** $Id: lgc.c,v 2.220 2017/04/11 18:41:09 roberto Exp roberto $ | 2 | ** $Id: lgc.c,v 2.221 2017/04/11 19:00:27 roberto Exp roberto $ |
| 3 | ** Garbage Collector | 3 | ** Garbage Collector |
| 4 | ** See Copyright Notice in lua.h | 4 | ** See Copyright Notice in lua.h |
| 5 | */ | 5 | */ |
| @@ -425,6 +425,8 @@ static int traverseephemeron (global_State *g, Table *h) { | |||
| 425 | linkgclist(h, g->allweak); /* may have to clean white keys */ | 425 | linkgclist(h, g->allweak); /* may have to clean white keys */ |
| 426 | else if (g->gckind == KGC_GEN) | 426 | else if (g->gckind == KGC_GEN) |
| 427 | linkgclist(h, g->grayagain); /* keep it in some list */ | 427 | linkgclist(h, g->grayagain); /* keep it in some list */ |
| 428 | else | ||
| 429 | gray2black(h); | ||
| 428 | return marked; | 430 | return marked; |
| 429 | } | 431 | } |
| 430 | 432 | ||
| @@ -939,16 +941,6 @@ void luaC_checkfinalizer (lua_State *L, GCObject *o, Table *mt) { | |||
| 939 | /* mask to erase all color bits, not changing gen-related stuff */ | 941 | /* mask to erase all color bits, not changing gen-related stuff */ |
| 940 | #define maskgencolors (~(bitmask(BLACKBIT) | WHITEBITS)) | 942 | #define maskgencolors (~(bitmask(BLACKBIT) | WHITEBITS)) |
| 941 | 943 | ||
| 942 | #if 0 | ||
| 943 | static int count (GCObject *p, GCObject *limit) { | ||
| 944 | int res = 0; | ||
| 945 | for (; p != NULL && p != limit; p = p->next) { | ||
| 946 | res++; | ||
| 947 | } | ||
| 948 | return res; | ||
| 949 | } | ||
| 950 | #endif | ||
| 951 | |||
| 952 | 944 | ||
| 953 | /* | 945 | /* |
| 954 | ** Sweep a list of objects, deleting dead ones and turning | 946 | ** Sweep a list of objects, deleting dead ones and turning |
| @@ -1017,42 +1009,6 @@ static void whitelist (global_State *g, GCObject *p) { | |||
| 1017 | p->marked = cast_byte((p->marked & maskcolors) | white); | 1009 | p->marked = cast_byte((p->marked & maskcolors) | white); |
| 1018 | } | 1010 | } |
| 1019 | 1011 | ||
| 1020 | static void printgray (GCObject *o) { | ||
| 1021 | printf("gray: "); | ||
| 1022 | while (o) { | ||
| 1023 | printf("%p %d %02x ", (void*)o, o->tt, o->marked); | ||
| 1024 | switch (o->tt) { | ||
| 1025 | case LUA_TTABLE: { | ||
| 1026 | Table *h = gco2t(o); | ||
| 1027 | o = h->gclist; | ||
| 1028 | break; | ||
| 1029 | } | ||
| 1030 | case LUA_TLCL: { | ||
| 1031 | LClosure *cl = gco2lcl(o); | ||
| 1032 | o = cl->gclist; | ||
| 1033 | break; | ||
| 1034 | } | ||
| 1035 | case LUA_TCCL: { | ||
| 1036 | CClosure *cl = gco2ccl(o); | ||
| 1037 | o = cl->gclist; | ||
| 1038 | break; | ||
| 1039 | } | ||
| 1040 | case LUA_TTHREAD: { | ||
| 1041 | lua_State *th = gco2th(o); | ||
| 1042 | o = th->gclist; | ||
| 1043 | break; | ||
| 1044 | } | ||
| 1045 | case LUA_TPROTO: { | ||
| 1046 | Proto *p = gco2p(o); | ||
| 1047 | o = p->gclist; | ||
| 1048 | break; | ||
| 1049 | } | ||
| 1050 | default: lua_assert(0); return; | ||
| 1051 | } | ||
| 1052 | } | ||
| 1053 | printf("\n"); | ||
| 1054 | } | ||
| 1055 | |||
| 1056 | 1012 | ||
| 1057 | /* | 1013 | /* |
| 1058 | ** Correct a list of gray objects. Because this correction is | 1014 | ** Correct a list of gray objects. Because this correction is |
| @@ -1317,7 +1273,7 @@ void luaC_freeallobjects (lua_State *L) { | |||
| 1317 | separatetobefnz(g, 1); /* separate all objects with finalizers */ | 1273 | separatetobefnz(g, 1); /* separate all objects with finalizers */ |
| 1318 | lua_assert(g->finobj == NULL); | 1274 | lua_assert(g->finobj == NULL); |
| 1319 | callallpendingfinalizers(L); | 1275 | callallpendingfinalizers(L); |
| 1320 | deletealllist(L, g->allgc, g->mainthread); | 1276 | deletealllist(L, g->allgc, obj2gco(g->mainthread)); |
| 1321 | deletealllist(L, g->finobj, NULL); | 1277 | deletealllist(L, g->finobj, NULL); |
| 1322 | deletealllist(L, g->fixedgc, NULL); /* collect fixed objects */ | 1278 | deletealllist(L, g->fixedgc, NULL); /* collect fixed objects */ |
| 1323 | lua_assert(g->strt.nuse == 0); | 1279 | lua_assert(g->strt.nuse == 0); |
