xref: /plan9/sys/src/cmd/gs/src/gsalloc.h (revision 593dc095aefb2a85c828727bbfa9da139a49bdf4)
1 /* Copyright (C) 1995, 1998 Aladdin Enterprises.  All rights reserved.
2 
3   This software is provided AS-IS with no warranty, either express or
4   implied.
5 
6   This software is distributed under license and may not be copied,
7   modified or distributed except as expressly authorized under the terms
8   of the license contained in the file LICENSE in this distribution.
9 
10   For more information about licensing, please refer to
11   http://www.ghostscript.com/licensing/. For information on
12   commercial licensing, go to http://www.artifex.com/licensing/ or
13   contact Artifex Software, Inc., 101 Lucas Valley Road #110,
14   San Rafael, CA  94903, U.S.A., +1(415)492-9861.
15 */
16 
17 /* $Id: gsalloc.h,v 1.7 2004/08/04 19:36:12 stefan Exp $ */
18 /* Memory allocator extensions for standard allocator */
19 
20 #ifndef gsalloc_INCLUDED
21 #  define gsalloc_INCLUDED
22 
23 /* The following should not be needed at this level! */
24 
25 #ifndef gs_ref_memory_DEFINED
26 #  define gs_ref_memory_DEFINED
27 typedef struct gs_ref_memory_s gs_ref_memory_t;
28 #endif
29 
30 /*
31  * Define a structure and interface for GC-related allocator state.
32  */
33 typedef struct gs_memory_gc_status_s {
34 	/* Set by client */
35     long vm_threshold;		/* GC interval */
36     long max_vm;		/* maximum allowed allocation */
37     int *psignal;		/* if not NULL, store signal_value */
38 				/* here if we go over the vm_threshold */
39     int signal_value;		/* value to store in *psignal */
40     bool enabled;		/* auto GC enabled if true */
41 	/* Set by allocator */
42     long requested;		/* amount of last failing request */
43 } gs_memory_gc_status_t;
44 void gs_memory_gc_status(const gs_ref_memory_t *, gs_memory_gc_status_t *);
45 void gs_memory_set_gc_status(gs_ref_memory_t *, const gs_memory_gc_status_t *);
46 void gs_memory_set_vm_threshold(gs_ref_memory_t * mem, long val);
47 void gs_memory_set_vm_reclaim(gs_ref_memory_t * mem, bool enabled);
48 
49 /* ------ Initialization ------ */
50 
51 /*
52  * Allocate and mostly initialize the state of an allocator (system, global,
53  * or local).  Does not initialize global or space.
54  */
55 gs_ref_memory_t *ialloc_alloc_state(gs_memory_t *, uint);
56 
57 /*
58  * Add a chunk to an externally controlled allocator.  Such allocators
59  * allocate all objects as immovable, are not garbage-collected, and
60  * don't attempt to acquire additional memory (or free chunks) on their own.
61  */
62 int ialloc_add_chunk(gs_ref_memory_t *, ulong, client_name_t);
63 
64 /* ------ Internal routines ------ */
65 
66 /* Prepare for a GC. */
67 void ialloc_gc_prepare(gs_ref_memory_t *);
68 
69 /* Initialize after a save. */
70 void ialloc_reset(gs_ref_memory_t *);
71 
72 /* Initialize after a save or GC. */
73 void ialloc_reset_free(gs_ref_memory_t *);
74 
75 /* Set the cached allocation limit of an alloctor from its GC parameters. */
76 void ialloc_set_limit(gs_ref_memory_t *);
77 
78 /* Consolidate free objects. */
79 void ialloc_consolidate_free(gs_ref_memory_t *);
80 
81 #endif /* gsalloc_INCLUDED */
82