From 44876ec99f3a772e15aa7a8a9b5134356fc6cc16 Mon Sep 17 00:00:00 2001 From: Mike Pall Date: Wed, 11 Apr 2012 15:15:50 +0200 Subject: [PATCH] Limit number of userdata __gc separations at state close. --- src/lj_state.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/lj_state.c b/src/lj_state.c index 711869a2..77c6df67 100644 --- a/src/lj_state.c +++ b/src/lj_state.c @@ -234,6 +234,7 @@ static TValue *cpfinalize(lua_State *L, lua_CFunction dummy, void *ud) LUA_API void lua_close(lua_State *L) { global_State *g = G(L); + int i; L = mainthread(g); /* Only the main thread can be closed. */ lj_func_closeuv(L, tvref(L->stack)); lj_gc_separateudata(g, 1); /* Separate udata which have GC metamethods. */ @@ -242,7 +243,7 @@ LUA_API void lua_close(lua_State *L) G2J(g)->state = LJ_TRACE_IDLE; lj_dispatch_update(g); #endif - for (;;) { + for (i = 0; i < 10; ) { hook_enter(g); L->status = 0; L->cframe = NULL; @@ -251,6 +252,7 @@ LUA_API void lua_close(lua_State *L) lj_gc_separateudata(g, 1); /* Separate udata again. */ if (gcref(g->gc.mmudata) == NULL) /* Until nothing is left to do. */ break; + i++; } } close_state(L);