diff options
Diffstat (limited to '')
| -rw-r--r-- | lstate.c | 20 |
1 files changed, 6 insertions, 14 deletions
| @@ -1,5 +1,5 @@ | |||
| 1 | /* | 1 | /* |
| 2 | ** $Id: lstate.c,v 2.111 2013/09/05 19:31:49 roberto Exp roberto $ | 2 | ** $Id: lstate.c,v 2.112 2013/09/11 12:26:14 roberto Exp roberto $ |
| 3 | ** Global State | 3 | ** Global State |
| 4 | ** See Copyright Notice in lua.h | 4 | ** See Copyright Notice in lua.h |
| 5 | */ | 5 | */ |
| @@ -165,14 +165,6 @@ static void init_registry (lua_State *L, global_State *g) { | |||
| 165 | sethvalue(L, &g->l_registry, registry); | 165 | sethvalue(L, &g->l_registry, registry); |
| 166 | luaH_resize(L, registry, LUA_RIDX_LAST, 0); | 166 | luaH_resize(L, registry, LUA_RIDX_LAST, 0); |
| 167 | nolocal(obj2gco(registry)); | 167 | nolocal(obj2gco(registry)); |
| 168 | /* registry is the first "regular" object created by a state; move it | ||
| 169 | from 'localgc' to 'allgc' so that it act as a "sentinel" there */ | ||
| 170 | lua_assert(g->allgc == NULL && | ||
| 171 | registry->next == NULL && | ||
| 172 | g->localgc == obj2gco(registry)); | ||
| 173 | g->allgc = g->localgc; | ||
| 174 | g->localgc = NULL; | ||
| 175 | l_setbit(registry->marked, LOCALMARK); /* mark that it is not in 'localgc' */ | ||
| 176 | /* registry[LUA_RIDX_MAINTHREAD] = L */ | 168 | /* registry[LUA_RIDX_MAINTHREAD] = L */ |
| 177 | setthvalue(L, &temp, L); /* temp = L */ | 169 | setthvalue(L, &temp, L); /* temp = L */ |
| 178 | luaH_setint(L, registry, LUA_RIDX_MAINTHREAD, &temp); | 170 | luaH_setint(L, registry, LUA_RIDX_MAINTHREAD, &temp); |
| @@ -243,11 +235,11 @@ LUA_API lua_State *lua_newthread (lua_State *L) { | |||
| 243 | luaC_checkGC(L); | 235 | luaC_checkGC(L); |
| 244 | /* create new thread */ | 236 | /* create new thread */ |
| 245 | L1 = &cast(LX *, luaM_newobject(L, LUA_TTHREAD, sizeof(LX)))->l; | 237 | L1 = &cast(LX *, luaM_newobject(L, LUA_TTHREAD, sizeof(LX)))->l; |
| 246 | L1->marked = luaC_white(g) | bitmask(LOCALMARK) | bitmask(NOLOCALBIT); | 238 | L1->marked = luaC_white(g) | bit2mask(NOLOCALBIT, LOCALMARK); |
| 247 | L1->tt = LUA_TTHREAD; | 239 | L1->tt = LUA_TTHREAD; |
| 248 | /* link it after 'l_registry' */ | 240 | /* link it on list of threads */ |
| 249 | L1->next = hvalue(&g->l_registry)->next; | 241 | L1->next = g->mainthread->next; |
| 250 | hvalue(&g->l_registry)->next = obj2gco(L1); | 242 | g->mainthread->next = obj2gco(L1); |
| 251 | setthvalue(L, L->top, L1); | 243 | setthvalue(L, L->top, L1); |
| 252 | api_incr_top(L); | 244 | api_incr_top(L); |
| 253 | preinit_state(L1, g); | 245 | preinit_state(L1, g); |
| @@ -283,7 +275,7 @@ LUA_API lua_State *lua_newstate (lua_Alloc f, void *ud) { | |||
| 283 | L->next = NULL; | 275 | L->next = NULL; |
| 284 | L->tt = LUA_TTHREAD; | 276 | L->tt = LUA_TTHREAD; |
| 285 | g->currentwhite = bitmask(WHITE0BIT); | 277 | g->currentwhite = bitmask(WHITE0BIT); |
| 286 | L->marked = luaC_white(g) | bitmask(NOLOCALBIT); | 278 | L->marked = luaC_white(g) | bit2mask(NOLOCALBIT, LOCALMARK); |
| 287 | g->gckind = KGC_NORMAL; | 279 | g->gckind = KGC_NORMAL; |
| 288 | preinit_state(L, g); | 280 | preinit_state(L, g); |
| 289 | g->frealloc = f; | 281 | g->frealloc = f; |
