2011-03-30 13:47:56 +00:00
|
|
|
typedef struct Pool Pool;
|
|
|
|
struct Pool {
|
|
|
|
char* name;
|
2014-02-06 21:47:05 +00:00
|
|
|
uintptr maxsize;
|
2011-03-30 13:47:56 +00:00
|
|
|
|
2014-02-06 21:47:05 +00:00
|
|
|
uintptr cursize;
|
|
|
|
uintptr curfree;
|
|
|
|
uintptr curalloc;
|
2011-03-30 13:47:56 +00:00
|
|
|
|
|
|
|
ulong minarena; /* smallest size of new arena */
|
|
|
|
ulong quantum; /* allocated blocks should be multiple of */
|
|
|
|
ulong minblock; /* smallest newly allocated block */
|
|
|
|
|
|
|
|
void* freeroot; /* actually Free* */
|
|
|
|
void* arenalist; /* actually Arena* */
|
|
|
|
|
|
|
|
void* (*alloc)(ulong);
|
|
|
|
int (*merge)(void*, void*);
|
|
|
|
void (*move)(void* from, void* to);
|
|
|
|
|
|
|
|
int flags;
|
|
|
|
int nfree;
|
|
|
|
int lastcompact;
|
|
|
|
|
|
|
|
void (*lock)(Pool*);
|
|
|
|
void (*unlock)(Pool*);
|
|
|
|
void (*print)(Pool*, char*, ...);
|
|
|
|
void (*panic)(Pool*, char*, ...);
|
|
|
|
void (*logstack)(Pool*);
|
|
|
|
|
|
|
|
void* private;
|
|
|
|
};
|
|
|
|
|
|
|
|
extern void* poolalloc(Pool*, ulong);
|
|
|
|
extern void* poolallocalign(Pool*, ulong, ulong, long, ulong);
|
|
|
|
extern void poolfree(Pool*, void*);
|
|
|
|
extern ulong poolmsize(Pool*, void*);
|
|
|
|
extern void* poolrealloc(Pool*, void*, ulong);
|
|
|
|
extern void poolcheck(Pool*);
|
|
|
|
extern int poolcompact(Pool*);
|
|
|
|
extern void poolblockcheck(Pool*, void*);
|
|
|
|
|
|
|
|
extern Pool* mainmem;
|
|
|
|
extern Pool* imagmem;
|
|
|
|
|
|
|
|
enum { /* flags */
|
|
|
|
POOL_ANTAGONISM = 1<<0,
|
|
|
|
POOL_PARANOIA = 1<<1,
|
|
|
|
POOL_VERBOSITY = 1<<2,
|
|
|
|
POOL_DEBUGGING = 1<<3,
|
|
|
|
POOL_LOGGING = 1<<4,
|
|
|
|
POOL_TOLERANCE = 1<<5,
|
|
|
|
POOL_NOREUSE = 1<<6,
|
|
|
|
};
|