diff options
Diffstat (limited to 'lgc.c')
-rw-r--r-- | lgc.c | 9 |
1 files changed, 4 insertions, 5 deletions
@@ -1,5 +1,5 @@ | |||
1 | /* | 1 | /* |
2 | ** $Id: lgc.c,v 2.56 2009/09/28 13:50:34 roberto Exp roberto $ | 2 | ** $Id: lgc.c,v 2.57 2009/09/28 16:32:50 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 | */ |
@@ -221,9 +221,9 @@ static void markroot (lua_State *L) { | |||
221 | g->grayagain = NULL; | 221 | g->grayagain = NULL; |
222 | g->weak = g->ephemeron = g->allweak = NULL; | 222 | g->weak = g->ephemeron = g->allweak = NULL; |
223 | markobject(g, g->mainthread); | 223 | markobject(g, g->mainthread); |
224 | /* make global table be traversed before main stack */ | 224 | /* make global table and registry to be traversed before main stack */ |
225 | markvalue(g, gt(g->mainthread)); | 225 | markvalue(g, &g->l_gt); |
226 | markvalue(g, registry(L)); | 226 | markvalue(g, &g->l_registry); |
227 | markmt(g); | 227 | markmt(g); |
228 | markbeingfnz(g); /* mark any finalizing object left from previous cycle */ | 228 | markbeingfnz(g); /* mark any finalizing object left from previous cycle */ |
229 | g->gcstate = GCSpropagate; | 229 | g->gcstate = GCSpropagate; |
@@ -383,7 +383,6 @@ static void traversestack (global_State *g, lua_State *L) { | |||
383 | StkId o; | 383 | StkId o; |
384 | if (L->stack == NULL) | 384 | if (L->stack == NULL) |
385 | return; /* stack not completely built yet */ | 385 | return; /* stack not completely built yet */ |
386 | markvalue(g, gt(L)); /* mark global table */ | ||
387 | for (o = L->stack; o < L->top; o++) | 386 | for (o = L->stack; o < L->top; o++) |
388 | markvalue(g, o); | 387 | markvalue(g, o); |
389 | if (g->gcstate == GCSatomic) { /* final traversal? */ | 388 | if (g->gcstate == GCSatomic) { /* final traversal? */ |