diff options
Diffstat (limited to 'lgc.c')
| -rw-r--r-- | lgc.c | 6 |
1 files changed, 2 insertions, 4 deletions
| @@ -273,8 +273,7 @@ static void reallymarkobject (global_State *g, GCObject *o) { | |||
| 273 | gray2black(o); | 273 | gray2black(o); |
| 274 | break; | 274 | break; |
| 275 | } | 275 | } |
| 276 | case LUA_TUPVAL: | 276 | case LUA_TUPVAL: { |
| 277 | case LUA_TUPVALTBC: { | ||
| 278 | UpVal *uv = gco2upv(o); | 277 | UpVal *uv = gco2upv(o); |
| 279 | if (!upisopen(uv)) /* open upvalues are kept gray */ | 278 | if (!upisopen(uv)) /* open upvalues are kept gray */ |
| 280 | gray2black(o); | 279 | gray2black(o); |
| @@ -571,7 +570,7 @@ static int traversethread (global_State *g, lua_State *th) { | |||
| 571 | for (; o < th->top; o++) /* mark live elements in the stack */ | 570 | for (; o < th->top; o++) /* mark live elements in the stack */ |
| 572 | markvalue(g, s2v(o)); | 571 | markvalue(g, s2v(o)); |
| 573 | for (uv = th->openupval; uv != NULL; uv = uv->u.open.next) { | 572 | for (uv = th->openupval; uv != NULL; uv = uv->u.open.next) { |
| 574 | if (uv->tt == LUA_TUPVALTBC) /* to be closed? */ | 573 | if (uv->tbc) /* to be closed? */ |
| 575 | markobject(g, uv); /* cannot be collected */ | 574 | markobject(g, uv); /* cannot be collected */ |
| 576 | } | 575 | } |
| 577 | if (g->gcstate == GCSatomic) { /* final traversal? */ | 576 | if (g->gcstate == GCSatomic) { /* final traversal? */ |
| @@ -706,7 +705,6 @@ static void freeobj (lua_State *L, GCObject *o) { | |||
| 706 | luaF_freeproto(L, gco2p(o)); | 705 | luaF_freeproto(L, gco2p(o)); |
| 707 | break; | 706 | break; |
| 708 | case LUA_TUPVAL: | 707 | case LUA_TUPVAL: |
| 709 | case LUA_TUPVALTBC: | ||
| 710 | freeupval(L, gco2upv(o)); | 708 | freeupval(L, gco2upv(o)); |
| 711 | break; | 709 | break; |
| 712 | case LUA_TLCL: | 710 | case LUA_TLCL: |
