xref: /plan9/sys/include/pool.h (revision 5243b8d1ffcf8ee007845a1a7d97f2c8b70cbd68)
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