diff options
| -rw-r--r-- | lgc.c | 6 |
1 files changed, 3 insertions, 3 deletions
| @@ -1,5 +1,5 @@ | |||
| 1 | /* | 1 | /* |
| 2 | ** $Id: lgc.c,v 1.137 2002/06/20 20:41:46 roberto Exp roberto $ | 2 | ** $Id: lgc.c,v 1.138 2002/06/24 17:19:43 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 | */ |
| @@ -215,7 +215,7 @@ static void traversetable (GCState *st, Table *h) { | |||
| 215 | int weakvalue = 0; | 215 | int weakvalue = 0; |
| 216 | marktable(st, h->metatable); | 216 | marktable(st, h->metatable); |
| 217 | lua_assert(h->lsizenode || h->node == G(st->L)->dummynode); | 217 | lua_assert(h->lsizenode || h->node == G(st->L)->dummynode); |
| 218 | mode = fasttm(st->L, h->metatable, TM_WEAKMODE); | 218 | mode = fasttm(st->L, h->metatable, TM_MODE); |
| 219 | if (mode && ttype(mode) == LUA_TSTRING) { /* weak table? */ | 219 | if (mode && ttype(mode) == LUA_TSTRING) { /* weak table? */ |
| 220 | h->mark = st->toclear; /* must be cleared after GC, ... */ | 220 | h->mark = st->toclear; /* must be cleared after GC, ... */ |
| 221 | st->toclear = h; /* ...put in the appropriate list */ | 221 | st->toclear = h; /* ...put in the appropriate list */ |
| @@ -458,10 +458,10 @@ void luaC_collectgarbage (lua_State *L) { | |||
| 458 | st.toclear = NULL; | 458 | st.toclear = NULL; |
| 459 | markstacks(&st); /* mark all stacks */ | 459 | markstacks(&st); /* mark all stacks */ |
| 460 | propagatemarks(&st); /* mark all reachable objects */ | 460 | propagatemarks(&st); /* mark all reachable objects */ |
| 461 | cleartables(st.toclear); | ||
| 461 | separateudata(L); /* separate userdata to be preserved */ | 462 | separateudata(L); /* separate userdata to be preserved */ |
| 462 | marktmu(&st); /* mark `preserved' userdata */ | 463 | marktmu(&st); /* mark `preserved' userdata */ |
| 463 | propagatemarks(&st); /* remark */ | 464 | propagatemarks(&st); /* remark */ |
| 464 | cleartables(st.toclear); | ||
| 465 | luaC_collect(L, 0); | 465 | luaC_collect(L, 0); |
| 466 | checkMbuffer(L); | 466 | checkMbuffer(L); |
| 467 | G(L)->GCthreshold = 2*G(L)->nblocks; /* new threshold */ | 467 | G(L)->GCthreshold = 2*G(L)->nblocks; /* new threshold */ |
