From e14b6346b4d4f91eb988c8a6046814a8707e04d5 Mon Sep 17 00:00:00 2001 From: Mike Pall Date: Wed, 11 Apr 2012 12:08:09 +0200 Subject: Ensure running __gc of userdata created in __gc at state close. --- src/lj_state.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/lj_state.c b/src/lj_state.c index 66c0b99f..711869a2 100644 --- a/src/lj_state.c +++ b/src/lj_state.c @@ -242,12 +242,17 @@ LUA_API void lua_close(lua_State *L) G2J(g)->state = LJ_TRACE_IDLE; lj_dispatch_update(g); #endif - do { + for (;;) { hook_enter(g); L->status = 0; L->cframe = NULL; L->base = L->top = tvref(L->stack) + 1; - } while (lj_vm_cpcall(L, NULL, NULL, cpfinalize) != 0); + if (lj_vm_cpcall(L, NULL, NULL, cpfinalize) == 0) { + lj_gc_separateudata(g, 1); /* Separate udata again. */ + if (gcref(g->gc.mmudata) == NULL) /* Until nothing is left to do. */ + break; + } + } close_state(L); } -- cgit v1.2.1