xref: /plan9/sys/include/pool.h (revision 5243b8d1ffcf8ee007845a1a7d97f2c8b70cbd68)
1 typedef struct Pool Pool;
2 struct Pool {
3 	char*	name;
4 	ulong	maxsize;
5 
6 	ulong	cursize;
7 	ulong	curfree;
8 	ulong	curalloc;
9 
10 	ulong	minarena;	/* smallest size of new arena */
11 	ulong	quantum;	/* allocated blocks should be multiple of */
12 	ulong	minblock;	/* smallest newly allocated block */
13 
14 	void*	freeroot;	/* actually Free* */
15 	void*	arenalist;	/* actually Arena* */
16 
17 	void*	(*alloc)(ulong);
18 	int	(*merge)(void*, void*);
19 	void	(*move)(void* from, void* to);
20 
21 	int	flags;
22 	int	nfree;
23 	int	lastcompact;
24 
25 	void	(*lock)(Pool*);
26 	void	(*unlock)(Pool*);
27 	void	(*print)(Pool*, char*, ...);
28 	void	(*panic)(Pool*, char*, ...);
29 	void	(*logstack)(Pool*);
30 
31 	void*	private;
32 };
33 
34 extern void*	poolalloc(Pool*, ulong);
35 extern void*	poolallocalign(Pool*, ulong, ulong, long, ulong);
36 extern void	poolfree(Pool*, void*);
37 extern ulong	poolmsize(Pool*, void*);
38 extern void*	poolrealloc(Pool*, void*, ulong);
39 extern void	poolcheck(Pool*);
40 extern int	poolcompact(Pool*);
41 extern void	poolblockcheck(Pool*, void*);
42 
43 extern Pool*	mainmem;
44 extern Pool*	imagmem;
45 
46 enum {	/* flags */
47 	POOL_ANTAGONISM	= 1<<0,
48 	POOL_PARANOIA	= 1<<1,
49 	POOL_VERBOSITY	= 1<<2,
50 	POOL_DEBUGGING	= 1<<3,
51 	POOL_LOGGING	= 1<<4,
52 	POOL_TOLERANCE	= 1<<5,
53 	POOL_NOREUSE	= 1<<6,
54 };
55