engine: common: zone: check that Mem_FindPool might return NULL (it can if Sys_Error was called inside of a Sys_Error)
This commit is contained in:
parent
cd47c6b5b3
commit
8f6771dff4
1 changed files with 13 additions and 4 deletions
|
@ -178,12 +178,16 @@ void *_Mem_Alloc( poolhandle_t poolptr, size_t size, qboolean clear, const char
|
||||||
if( size <= 0 )
|
if( size <= 0 )
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
if( !poolptr )
|
if( unlikely( !poolptr ))
|
||||||
{
|
{
|
||||||
Sys_Error( "%s: pool == NULL (alloc at %s:%i)\n", __func__, filename, fileline );
|
Sys_Error( "%s: pool == NULL (alloc at %s:%i)\n", __func__, filename, fileline );
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pool = Mem_FindPool( poolptr );
|
||||||
|
if( !pool )
|
||||||
|
return NULL;
|
||||||
|
|
||||||
mem = (memheader_t *)Q_malloc( sizeof( memheader_t ) + size + sizeof( byte ));
|
mem = (memheader_t *)Q_malloc( sizeof( memheader_t ) + size + sizeof( byte ));
|
||||||
if( mem == NULL )
|
if( mem == NULL )
|
||||||
{
|
{
|
||||||
|
@ -193,7 +197,6 @@ void *_Mem_Alloc( poolhandle_t poolptr, size_t size, qboolean clear, const char
|
||||||
|
|
||||||
Mem_InitAlloc( mem, size, filename, fileline );
|
Mem_InitAlloc( mem, size, filename, fileline );
|
||||||
|
|
||||||
pool = Mem_FindPool( poolptr );
|
|
||||||
Mem_PoolAdd( pool, size );
|
Mem_PoolAdd( pool, size );
|
||||||
Mem_PoolLinkAlloc( pool, mem );
|
Mem_PoolLinkAlloc( pool, mem );
|
||||||
|
|
||||||
|
@ -211,6 +214,8 @@ static void Mem_FreeBlock( memheader_t *mem, const char *filename, int fileline
|
||||||
return;
|
return;
|
||||||
|
|
||||||
pool = Mem_FindPool( mem->poolptr );
|
pool = Mem_FindPool( mem->poolptr );
|
||||||
|
if( !pool )
|
||||||
|
return;
|
||||||
|
|
||||||
// unlink memheader from doubly linked list
|
// unlink memheader from doubly linked list
|
||||||
if(( mem->prev ? mem->prev->next != mem : pool->chain != mem ) || ( mem->next && mem->next->prev != mem ))
|
if(( mem->prev ? mem->prev->next != mem : pool->chain != mem ) || ( mem->next && mem->next->prev != mem ))
|
||||||
|
@ -369,13 +374,17 @@ void _Mem_FreePool( poolhandle_t *poolptr, const char *filename, int fileline )
|
||||||
|
|
||||||
void _Mem_EmptyPool( poolhandle_t poolptr, const char *filename, int fileline )
|
void _Mem_EmptyPool( poolhandle_t poolptr, const char *filename, int fileline )
|
||||||
{
|
{
|
||||||
mempool_t *pool = Mem_FindPool( poolptr );
|
mempool_t *pool;
|
||||||
if( !poolptr )
|
if( unlikely( !poolptr ))
|
||||||
{
|
{
|
||||||
Sys_Error( "Mem_EmptyPool: pool == NULL (emptypool at %s:%i)\n", filename, fileline );
|
Sys_Error( "Mem_EmptyPool: pool == NULL (emptypool at %s:%i)\n", filename, fileline );
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pool = Mem_FindPool( poolptr );
|
||||||
|
if( !pool )
|
||||||
|
return;
|
||||||
|
|
||||||
// free memory owned by the pool
|
// free memory owned by the pool
|
||||||
while( pool->chain ) Mem_FreeBlock( pool->chain, filename, fileline );
|
while( pool->chain ) Mem_FreeBlock( pool->chain, filename, fileline );
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue