diff options
| author | Lua Team <team@lua.org> | 2005-03-04 12:00:00 +0000 |
|---|---|---|
| committer | repogen <> | 2005-03-04 12:00:00 +0000 |
| commit | e6ddfd3b09c0a3727afc773029c323a3defe50fa (patch) | |
| tree | 70e021a2b008f43064eeb04e002a31ba371b5108 /src/lmem.c | |
| parent | e2493a40ee611d5a718fd2a81fe67e24c04c91a0 (diff) | |
| download | lua-github-5.1-work5.tar.gz | |
Lua 5.1-work55.1-work5
Diffstat (limited to 'src/lmem.c')
| -rw-r--r-- | src/lmem.c | 32 |
1 files changed, 24 insertions, 8 deletions
@@ -1,5 +1,5 @@ /* -** $Id: lmem.c,v 1.67 2004/12/01 15:46:18 roberto Exp $ +** $Id: lmem.c,v 1.69 2005/02/23 17:30:22 roberto Exp $ ** Interface to Memory Manager ** See Copyright Notice in lua.h */ @@ -22,19 +22,19 @@ /* ** About the realloc function: -** void * realloc (void *ud, void *ptr, size_t osize, size_t nsize); +** void * frealloc (void *ud, void *ptr, size_t osize, size_t nsize); ** (`osize' is the old size, `nsize' is the new size) ** ** Lua ensures that (ptr == NULL) iff (osize == 0). ** -** * realloc(ud, NULL, 0, x) creates a new block of size `x' +** * frealloc(ud, NULL, 0, x) creates a new block of size `x' ** -** * realloc(ud, p, x, 0) frees the block `p' -** (in this specific case, realloc must return NULL). -** particularly, realloc(ud, NULL, 0, 0) does nothing +** * frealloc(ud, p, x, 0) frees the block `p' +** (in this specific case, frealloc must return NULL). +** particularly, frealloc(ud, NULL, 0, 0) does nothing ** (which is equivalent to free(NULL) in ANSI C) ** -** realloc returns NULL if it cannot create or reallocate the area +** frealloc returns NULL if it cannot create or reallocate the area ** (any reallocation to an equal or smaller size cannot fail!) */ @@ -76,11 +76,27 @@ void *luaM_toobig (lua_State *L) { void *luaM_realloc_ (lua_State *L, void *block, size_t osize, size_t nsize) { global_State *g = G(L); lua_assert((osize == 0) == (block == NULL)); - block = (*g->realloc)(g->ud, block, osize, nsize); + block = (*g->frealloc)(g->ud, block, osize, nsize); if (block == NULL && nsize > 0) luaD_throw(L, LUA_ERRMEM); lua_assert((nsize == 0) == (block == NULL)); g->totalbytes = (g->totalbytes - osize) + nsize; +#if 0 + { /* auxiliar patch to monitor garbage collection */ + static unsigned long total = 0; /* our "time" */ + static lu_mem last = 0; /* last totalmem that generated an output */ + static FILE *f = NULL; /* output file */ + if (nsize <= osize) total += 1; /* "time" always grow */ + else total += (nsize - osize); + if ((int)g->totalbytes - (int)last > 1000 || + (int)g->totalbytes - (int)last < -1000) { + last = g->totalbytes; + if (f == NULL) f = fopen("trace", "w"); + fprintf(f, "%lu %u %u %u %d\n", total, g->totalbytes, g->GCthreshold, + g->estimate, g->gcstate); + } + } +#endif return block; } |
