diff options
Diffstat (limited to 'lstate.c')
-rw-r--r-- | lstate.c | 11 |
1 files changed, 8 insertions, 3 deletions
@@ -1,5 +1,5 @@ | |||
1 | /* | 1 | /* |
2 | ** $Id: lstate.c,v 1.40 2000/09/21 14:41:25 roberto Exp roberto $ | 2 | ** $Id: lstate.c,v 1.41 2000/09/25 16:22:42 roberto Exp roberto $ |
3 | ** Global State | 3 | ** Global State |
4 | ** See Copyright Notice in lua.h | 4 | ** See Copyright Notice in lua.h |
5 | */ | 5 | */ |
@@ -78,7 +78,7 @@ lua_State *lua_open (int stacksize) { | |||
78 | L->refArray = NULL; | 78 | L->refArray = NULL; |
79 | L->refSize = 0; | 79 | L->refSize = 0; |
80 | L->refFree = NONEXT; | 80 | L->refFree = NONEXT; |
81 | L->nblocks = 0; | 81 | L->nblocks = sizeof(lua_State); |
82 | L->GCthreshold = MAX_INT; /* to avoid GC during pre-definitions */ | 82 | L->GCthreshold = MAX_INT; /* to avoid GC during pre-definitions */ |
83 | L->callhook = NULL; | 83 | L->callhook = NULL; |
84 | L->linehook = NULL; | 84 | L->linehook = NULL; |
@@ -100,11 +100,16 @@ void lua_close (lua_State *L) { | |||
100 | LUA_ASSERT(L->rootcl == NULL, "list should be empty"); | 100 | LUA_ASSERT(L->rootcl == NULL, "list should be empty"); |
101 | LUA_ASSERT(L->roottable == NULL, "list should be empty"); | 101 | LUA_ASSERT(L->roottable == NULL, "list should be empty"); |
102 | luaS_freeall(L); | 102 | luaS_freeall(L); |
103 | if (L->stack) | ||
104 | L->nblocks -= (L->stack_last - L->stack + 1)*sizeof(TObject); | ||
103 | luaM_free(L, L->stack); | 105 | luaM_free(L, L->stack); |
106 | L->nblocks -= (L->last_tag+1)*sizeof(struct IM); | ||
104 | luaM_free(L, L->IMtable); | 107 | luaM_free(L, L->IMtable); |
108 | L->nblocks -= (L->refSize)*sizeof(struct Ref); | ||
105 | luaM_free(L, L->refArray); | 109 | luaM_free(L, L->refArray); |
110 | L->nblocks -= (L->Mbuffsize)*sizeof(char); | ||
106 | luaM_free(L, L->Mbuffer); | 111 | luaM_free(L, L->Mbuffer); |
107 | LUA_ASSERT(L->nblocks == 0, "wrong count for nblocks"); | 112 | LUA_ASSERT(L->nblocks == sizeof(lua_State), "wrong count for nblocks"); |
108 | luaM_free(L, L); | 113 | luaM_free(L, L); |
109 | LUA_ASSERT(L != lua_state || memdebug_numblocks == 0, "memory leak!"); | 114 | LUA_ASSERT(L != lua_state || memdebug_numblocks == 0, "memory leak!"); |
110 | LUA_ASSERT(L != lua_state || memdebug_total == 0,"memory leak!"); | 115 | LUA_ASSERT(L != lua_state || memdebug_total == 0,"memory leak!"); |