From 24429ed1f5c52258700e2e16c898c1dd9b8c4203 Mon Sep 17 00:00:00 2001 From: Mike Pall Date: Tue, 29 Dec 2009 04:36:35 +0100 Subject: [PATCH] Fix alloc/free sizes of internal GCRef arrays. --- src/lj_func.c | 2 +- src/lj_gc.c | 2 +- src/lj_parse.c | 2 +- src/lj_state.c | 2 +- src/lj_str.c | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/lj_func.c b/src/lj_func.c index 61a810f2..45685207 100644 --- a/src/lj_func.c +++ b/src/lj_func.c @@ -47,7 +47,7 @@ GCproto *lj_func_newproto(lua_State *L) void LJ_FASTCALL lj_func_freeproto(global_State *g, GCproto *pt) { MSize nkgc = round_nkgc(pt->sizekgc); - MSize sizek = nkgc*(MSize)sizeof(GCobj *) + + MSize sizek = nkgc*(MSize)sizeof(GCRef) + pt->sizekn*(MSize)sizeof(lua_Number); lj_mem_free(g, pt->k.gc - nkgc, sizek); lj_mem_freevec(g, pt->bc, pt->sizebc, BCIns); diff --git a/src/lj_gc.c b/src/lj_gc.c index 55640521..3e4c1787 100644 --- a/src/lj_gc.c +++ b/src/lj_gc.c @@ -327,7 +327,7 @@ static size_t propagatemark(global_State *g) GCproto *pt = gco2pt(o); gc_traverse_proto(g, pt); return sizeof(GCproto) + sizeof(BCIns) * pt->sizebc + - sizeof(GCobj *) * pt->sizekgc + + sizeof(GCRef) * pt->sizekgc + sizeof(lua_Number) * pt->sizekn + sizeof(int16_t) * pt->sizeuv + sizeof(int32_t) * pt->sizelineinfo + diff --git a/src/lj_parse.c b/src/lj_parse.c index 1de07e92..4aa23a1b 100644 --- a/src/lj_parse.c +++ b/src/lj_parse.c @@ -1140,7 +1140,7 @@ static void collectk(FuncState *fs, GCproto *pt) checklimitgt(fs, fs->nkn, BCMAX_D+1, "constants"); checklimitgt(fs, fs->nkgc, BCMAX_D+1, "constants"); nkgc = round_nkgc(fs->nkgc); - sizek = (MSize)(nkgc*sizeof(MRef) + fs->nkn*sizeof(lua_Number)); + sizek = (MSize)(nkgc*sizeof(GCRef) + fs->nkn*sizeof(lua_Number)); kstart = lj_mem_newt(fs->L, sizek, GCRef); if (nkgc) setgcrefnull(kstart[0]); /* May be uninitialized otherwise. */ pt->k.gc = kstart + nkgc; diff --git a/src/lj_state.c b/src/lj_state.c index 57c3dded..ef8f65ea 100644 --- a/src/lj_state.c +++ b/src/lj_state.c @@ -150,7 +150,7 @@ static void close_state(lua_State *L) lua_assert(gcref(g->gc.root) == obj2gco(L)); lua_assert(g->strnum == 0); lj_trace_freestate(g); - lj_mem_freevec(g, g->strhash, g->strmask+1, GCstr *); + lj_mem_freevec(g, g->strhash, g->strmask+1, GCRef); lj_str_freebuf(g, &g->tmpbuf); lj_mem_freevec(g, L->stack, L->stacksize, TValue); lua_assert(g->gc.total == sizeof(GG_State)); diff --git a/src/lj_str.c b/src/lj_str.c index 62322b59..fec2d9b2 100644 --- a/src/lj_str.c +++ b/src/lj_str.c @@ -64,7 +64,7 @@ void lj_str_resize(lua_State *L, MSize newmask) p = next; } } - lj_mem_freevec(g, g->strhash, g->strmask+1, GCstr *); + lj_mem_freevec(g, g->strhash, g->strmask+1, GCRef); g->strmask = newmask; g->strhash = newhash; }