mirror of
git://xwords.git.sourceforge.net/gitroot/xwords/xwords
synced 2025-01-30 08:34:16 +01:00
Add file and line number to debug version of realloc and free.
This commit is contained in:
parent
022317b47a
commit
6e71f8197e
3 changed files with 20 additions and 10 deletions
|
@ -162,8 +162,8 @@ typedef struct CommonPrefs {
|
||||||
#ifdef MEM_DEBUG
|
#ifdef MEM_DEBUG
|
||||||
# define XP_MALLOC(pool,nbytes) \
|
# define XP_MALLOC(pool,nbytes) \
|
||||||
mpool_alloc((pool),(nbytes),__FILE__,__LINE__)
|
mpool_alloc((pool),(nbytes),__FILE__,__LINE__)
|
||||||
# define XP_REALLOC(pool,p,s) mpool_realloc((pool),(p),(s))
|
# define XP_REALLOC(pool,p,s) mpool_realloc((pool),(p),(s),__FILE__,__LINE__)
|
||||||
# define XP_FREE(pool,p) mpool_free((pool), (p))
|
# define XP_FREE(pool,p) mpool_free((pool), (p),__FILE__,__LINE__)
|
||||||
|
|
||||||
# define MPFORMAL_NOCOMMA MemPoolCtx* mpool
|
# define MPFORMAL_NOCOMMA MemPoolCtx* mpool
|
||||||
# define MPFORMAL MPFORMAL_NOCOMMA,
|
# define MPFORMAL MPFORMAL_NOCOMMA,
|
||||||
|
|
|
@ -165,29 +165,38 @@ findEntryFor( MemPoolCtx* mpool, void* ptr, MemPoolEntry** prevP )
|
||||||
return entry;
|
return entry;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
XP_ASSERT(0);
|
|
||||||
return (MemPoolEntry*)NULL;
|
return (MemPoolEntry*)NULL;
|
||||||
} /* findEntryFor */
|
} /* findEntryFor */
|
||||||
|
|
||||||
void*
|
void*
|
||||||
mpool_realloc( MemPoolCtx* mpool, void* ptr, XP_U32 newsize )
|
mpool_realloc( MemPoolCtx* mpool, void* ptr, XP_U32 newsize, const char* file, XP_U32 lineNo )
|
||||||
{
|
{
|
||||||
MemPoolEntry* entry = findEntryFor( mpool, ptr, (MemPoolEntry**)NULL );
|
MemPoolEntry* entry = findEntryFor( mpool, ptr, (MemPoolEntry**)NULL );
|
||||||
|
|
||||||
entry->ptr = XP_PLATREALLOC( entry->ptr, newsize );
|
if ( !entry ) {
|
||||||
XP_ASSERT( !!entry->ptr );
|
XP_LOGF( "findEntryFor failed; called from %s, line %d",
|
||||||
|
file, lineNo );
|
||||||
|
} else {
|
||||||
|
entry->ptr = XP_PLATREALLOC( entry->ptr, newsize );
|
||||||
|
XP_ASSERT( !!entry->ptr );
|
||||||
|
entry->fileName = file;
|
||||||
|
entry->lineNo = lineNo;
|
||||||
|
}
|
||||||
return entry->ptr;
|
return entry->ptr;
|
||||||
} /* mpool_realloc */
|
} /* mpool_realloc */
|
||||||
|
|
||||||
void
|
void
|
||||||
mpool_free( MemPoolCtx* mpool, void* ptr )
|
mpool_free( MemPoolCtx* mpool, void* ptr, const char* file, XP_U32 lineNo )
|
||||||
{
|
{
|
||||||
MemPoolEntry* entry;
|
MemPoolEntry* entry;
|
||||||
MemPoolEntry* prev;
|
MemPoolEntry* prev;
|
||||||
|
|
||||||
entry = findEntryFor( mpool, ptr, &prev );
|
entry = findEntryFor( mpool, ptr, &prev );
|
||||||
|
|
||||||
if ( !!entry ) {
|
if ( !entry ) {
|
||||||
|
XP_LOGF( "findEntryFor failed; called from %s, line %d",
|
||||||
|
file, lineNo );
|
||||||
|
} else {
|
||||||
|
|
||||||
if ( !!prev ) {
|
if ( !!prev ) {
|
||||||
prev->next = entry->next;
|
prev->next = entry->next;
|
||||||
|
|
|
@ -35,8 +35,9 @@ void mpool_destroy( MemPoolCtx* mpool );
|
||||||
|
|
||||||
void* mpool_alloc( MemPoolCtx* mpool, XP_U32 size,
|
void* mpool_alloc( MemPoolCtx* mpool, XP_U32 size,
|
||||||
const char* file, XP_U32 lineNo );
|
const char* file, XP_U32 lineNo );
|
||||||
void* mpool_realloc( MemPoolCtx* mpool, void* ptr, XP_U32 newsize );
|
void* mpool_realloc( MemPoolCtx* mpool, void* ptr, XP_U32 newsize,
|
||||||
void mpool_free( MemPoolCtx* mpool, void* ptr );
|
const char* file, XP_U32 lineNo );
|
||||||
|
void mpool_free( MemPoolCtx* mpool, void* ptr, const char* file, XP_U32 lineNo );
|
||||||
void mpool_stats( MemPoolCtx* mpool, XWStreamCtxt* stream );
|
void mpool_stats( MemPoolCtx* mpool, XWStreamCtxt* stream );
|
||||||
XP_U16 mpool_getNUsed( MemPoolCtx* mpool );
|
XP_U16 mpool_getNUsed( MemPoolCtx* mpool );
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue