Fix userdata __gc separations at state close.

This commit is contained in:
Mike Pall 2012-06-10 23:40:53 +02:00
parent 58ec704f78
commit 58622937c0

View File

@ -243,16 +243,16 @@ LUA_API void lua_close(lua_State *L)
G2J(g)->state = LJ_TRACE_IDLE; G2J(g)->state = LJ_TRACE_IDLE;
lj_dispatch_update(g); lj_dispatch_update(g);
#endif #endif
for (i = 0; i < 10; ) { for (i = 0;;) {
hook_enter(g); hook_enter(g);
L->status = 0; L->status = 0;
L->cframe = NULL; L->cframe = NULL;
L->base = L->top = tvref(L->stack) + 1; L->base = L->top = tvref(L->stack) + 1;
if (lj_vm_cpcall(L, NULL, NULL, cpfinalize) == 0) { if (lj_vm_cpcall(L, NULL, NULL, cpfinalize) == 0) {
if (++i >= 10) break;
lj_gc_separateudata(g, 1); /* Separate udata again. */ lj_gc_separateudata(g, 1); /* Separate udata again. */
if (gcref(g->gc.mmudata) == NULL) /* Until nothing is left to do. */ if (gcref(g->gc.mmudata) == NULL) /* Until nothing is left to do. */
break; break;
i++;
} }
} }
close_state(L); close_state(L);