17dd7cddfSDavid du Colombier typedef struct Pool Pool; 27dd7cddfSDavid du Colombier struct Pool { 37dd7cddfSDavid du Colombier char* name; 47dd7cddfSDavid du Colombier ulong maxsize; 57dd7cddfSDavid du Colombier 67dd7cddfSDavid du Colombier ulong cursize; 77dd7cddfSDavid du Colombier ulong curfree; 87dd7cddfSDavid du Colombier ulong curalloc; 97dd7cddfSDavid du Colombier 107dd7cddfSDavid du Colombier ulong minarena; /* smallest size of new arena */ 117dd7cddfSDavid du Colombier ulong quantum; /* allocated blocks should be multiple of */ 127dd7cddfSDavid du Colombier ulong minblock; /* smallest newly allocated block */ 137dd7cddfSDavid du Colombier 147dd7cddfSDavid du Colombier void* freeroot; /* actually Free* */ 157dd7cddfSDavid du Colombier void* arenalist; /* actually Arena* */ 167dd7cddfSDavid du Colombier 177dd7cddfSDavid du Colombier void* (*alloc)(ulong); 187dd7cddfSDavid du Colombier int (*merge)(void*, void*); 197dd7cddfSDavid du Colombier void (*move)(void* from, void* to); 207dd7cddfSDavid du Colombier 217dd7cddfSDavid du Colombier int flags; 227dd7cddfSDavid du Colombier int nfree; 237dd7cddfSDavid du Colombier int lastcompact; 247dd7cddfSDavid du Colombier 257dd7cddfSDavid du Colombier void (*lock)(Pool*); 267dd7cddfSDavid du Colombier void (*unlock)(Pool*); 277dd7cddfSDavid du Colombier void (*print)(Pool*, char*, ...); 287dd7cddfSDavid du Colombier void (*panic)(Pool*, char*, ...); 297dd7cddfSDavid du Colombier void (*logstack)(Pool*); 307dd7cddfSDavid du Colombier 317dd7cddfSDavid du Colombier void* private; 327dd7cddfSDavid du Colombier }; 337dd7cddfSDavid du Colombier 347dd7cddfSDavid du Colombier extern void* poolalloc(Pool*, ulong); 35*5243b8d1SDavid du Colombier extern void* poolallocalign(Pool*, ulong, ulong, long, ulong); 367dd7cddfSDavid du Colombier extern void poolfree(Pool*, void*); 377dd7cddfSDavid du Colombier extern ulong poolmsize(Pool*, void*); 387dd7cddfSDavid du Colombier extern void* poolrealloc(Pool*, void*, ulong); 397dd7cddfSDavid du Colombier extern void poolcheck(Pool*); 407dd7cddfSDavid du Colombier extern int poolcompact(Pool*); 417dd7cddfSDavid du Colombier extern void poolblockcheck(Pool*, void*); 427dd7cddfSDavid du Colombier 437dd7cddfSDavid du Colombier extern Pool* mainmem; 447dd7cddfSDavid du Colombier extern Pool* imagmem; 457dd7cddfSDavid du Colombier 467dd7cddfSDavid du Colombier enum { /* flags */ 477dd7cddfSDavid du Colombier POOL_ANTAGONISM = 1<<0, 487dd7cddfSDavid du Colombier POOL_PARANOIA = 1<<1, 497dd7cddfSDavid du Colombier POOL_VERBOSITY = 1<<2, 507dd7cddfSDavid du Colombier POOL_DEBUGGING = 1<<3, 517dd7cddfSDavid du Colombier POOL_LOGGING = 1<<4, 527dd7cddfSDavid du Colombier POOL_TOLERANCE = 1<<5, 539a747e4fSDavid du Colombier POOL_NOREUSE = 1<<6, 547dd7cddfSDavid du Colombier }; 55