aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMike Pall <mike>2012-06-10 23:40:53 +0200
committerMike Pall <mike>2012-06-10 23:40:53 +0200
commit58622937c06c3d689d69569907a81a1f7c3f1a96 (patch)
tree9e582ea339dd8869ab725b45488d7f1078aa297a
parent58ec704f78e311e6af97841a9e26cd7187955494 (diff)
downloadluajit-58622937c06c3d689d69569907a81a1f7c3f1a96.tar.gz
luajit-58622937c06c3d689d69569907a81a1f7c3f1a96.tar.bz2
luajit-58622937c06c3d689d69569907a81a1f7c3f1a96.zip
Fix userdata __gc separations at state close.
-rw-r--r--src/lj_state.c4
1 files changed, 2 insertions, 2 deletions
diff --git a/src/lj_state.c b/src/lj_state.c
index 77c6df67..38525319 100644
--- a/src/lj_state.c
+++ b/src/lj_state.c
@@ -243,16 +243,16 @@ LUA_API void lua_close(lua_State *L)
243 G2J(g)->state = LJ_TRACE_IDLE; 243 G2J(g)->state = LJ_TRACE_IDLE;
244 lj_dispatch_update(g); 244 lj_dispatch_update(g);
245#endif 245#endif
246 for (i = 0; i < 10; ) { 246 for (i = 0;;) {
247 hook_enter(g); 247 hook_enter(g);
248 L->status = 0; 248 L->status = 0;
249 L->cframe = NULL; 249 L->cframe = NULL;
250 L->base = L->top = tvref(L->stack) + 1; 250 L->base = L->top = tvref(L->stack) + 1;
251 if (lj_vm_cpcall(L, NULL, NULL, cpfinalize) == 0) { 251 if (lj_vm_cpcall(L, NULL, NULL, cpfinalize) == 0) {
252 if (++i >= 10) break;
252 lj_gc_separateudata(g, 1); /* Separate udata again. */ 253 lj_gc_separateudata(g, 1); /* Separate udata again. */
253 if (gcref(g->gc.mmudata) == NULL) /* Until nothing is left to do. */ 254 if (gcref(g->gc.mmudata) == NULL) /* Until nothing is left to do. */
254 break; 255 break;
255 i++;
256 } 256 }
257 } 257 }
258 close_state(L); 258 close_state(L);