Browse Source

Fix userdata __gc separations at state close.

Mike Pall 13 years ago
parent
commit
58622937c0
1 changed files with 2 additions and 2 deletions
  1. 2 2
      src/lj_state.c

+ 2 - 2
src/lj_state.c

@@ -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);