File: pool.h

package info (click to toggle)
tra 20020816-1
  • links: PTS
  • area: main
  • in suites: etch, etch-m68k, sarge
  • size: 1,696 kB
  • ctags: 2,623
  • sloc: ansic: 22,519; makefile: 406; asm: 269
file content (72 lines) | stat: -rw-r--r-- 1,476 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
typedef struct Pool Pool;
typedef struct Traverse Traverse;
struct Pool {
	char*	name;
	ulong	maxsize;

	ulong	cursize;
	ulong	curfree;
	ulong	curalloc;

	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;
};

struct Traverse
{
	int	(*visit)(void*, ulong);
	int	maxvisit;

	/* internal use only */
	void		*a;
	void		*b;
	void		*prev;
};

extern void*	poolalloc(Pool*, 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 int		pooltraverse(Pool*, Traverse*);

extern Pool*	pm_mainmem;
extern Pool*	pm_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
};

#ifndef NODEFINE
#undef  mainmem
#define mainmem			pm_mainmem
#undef  imagmem
#define imagmem			pm_imagmem
#endif