X-Git-Url: https://git.xonotic.org/?a=blobdiff_plain;f=zone.h;h=3dec0b62b961e3d4e4da026721d753588554ccfe;hb=ad190f0b6223954681ced0d704132c91214a2e4e;hp=6caa039087b83085bd86f53fc5e5429ad551d76b;hpb=775c4993063d7673903a2dfaebeacd1a9c71cbf7;p=xonotic%2Fdarkplaces.git diff --git a/zone.h b/zone.h index 6caa0390..3dec0b62 100644 --- a/zone.h +++ b/zone.h @@ -21,7 +21,12 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. #ifndef ZONE_H #define ZONE_H -extern qboolean mem_bigendian; +#include +#include "qtypes.h" +#include "qdefs.h" +#include "com_list.h" + +extern qbool mem_bigendian; // div0: heap overflow detection paranoia #define MEMPARANOIA 0 @@ -35,8 +40,7 @@ typedef struct memheader_s // address returned by Chunk_Alloc (may be significantly before this header to satisify alignment) void *baseaddress; // next and previous memheaders in chain belonging to pool - struct memheader_s *next; - struct memheader_s *prev; + struct llist_s list; // pool this memheader belongs to struct mempool_s *pool; // size of the memory after the header (excluding header and sentinel2) @@ -55,7 +59,7 @@ typedef struct mempool_s // should always be MEMPOOL_SENTINEL unsigned int sentinel1; // chain of individual memory allocations - struct memheader_s *chain; + struct llist_s chain; // POOLFLAG_* int flags; // total memory allocated in this pool (inside memheaders) @@ -82,8 +86,13 @@ mempool_t; #define Mem_Memalign(pool,alignment,size) _Mem_Alloc(pool, NULL, size, alignment, __FILE__, __LINE__) #define Mem_Realloc(pool,data,size) _Mem_Alloc(pool, data, size, 16, __FILE__, __LINE__) #define Mem_Free(mem) _Mem_Free(mem, __FILE__, __LINE__) +#define Mem_strdup(pool, s) _Mem_strdup(pool, s, __FILE__, __LINE__) #define Mem_CheckSentinels(data) _Mem_CheckSentinels(data, __FILE__, __LINE__) -#define Mem_CheckSentinelsGlobal() _Mem_CheckSentinelsGlobal(__FILE__, __LINE__) +#if MEMPARANOIA +#define Mem_CheckSentinelsGlobal() _Mem_CheckSentinelsGlobal(__FILE__, __LINE__) +#else +#define Mem_CheckSentinelsGlobal() if(developer_memorydebug.integer) { _Mem_CheckSentinelsGlobal(__FILE__, __LINE__); } +#endif #define Mem_AllocPool(name, flags, parent) _Mem_AllocPool(name, flags, parent, __FILE__, __LINE__) #define Mem_FreePool(pool) _Mem_FreePool(pool, __FILE__, __LINE__) #define Mem_EmptyPool(pool) _Mem_EmptyPool(pool, __FILE__, __LINE__) @@ -96,9 +105,9 @@ void _Mem_EmptyPool(mempool_t *pool, const char *filename, int fileline); void _Mem_CheckSentinels(void *data, const char *filename, int fileline); void _Mem_CheckSentinelsGlobal(const char *filename, int fileline); // if pool is NULL this searches ALL pools for the allocation -qboolean Mem_IsAllocated(mempool_t *pool, void *data); +qbool Mem_IsAllocated(mempool_t *pool, void *data); -char* Mem_strdup (mempool_t *pool, const char* s); +char* _Mem_strdup (mempool_t *pool, const char* s, const char *filename, int fileline); typedef struct memexpandablearray_array_s { @@ -134,11 +143,14 @@ void Memory_Shutdown (void); void Memory_Init_Commands (void); extern mempool_t *zonemempool; -#define Z_Malloc(size) Mem_Alloc(zonemempool,size) +#define Z_Malloc(size) Mem_Alloc(zonemempool, size) +#define Z_Realloc(data, size) Mem_Realloc(zonemempool, data, size) +#define Z_strdup(s) Mem_strdup(zonemempool, s) #define Z_Free(data) Mem_Free(data) extern struct cvar_s developer_memory; extern struct cvar_s developer_memorydebug; +extern struct cvar_s developer_memoryreportlargerthanmb; #endif