1
/* Copyright (C) 2001-2006 Artifex Software, Inc.
4
This software is provided AS-IS with no warranty, either express or
7
This software is distributed under license and may not be copied, modified
8
or distributed except as expressly authorized under the terms of that
9
license. Refer to licensing information at http://www.artifex.com/
10
or contact Artifex Software, Inc., 7 Mt. Lassen Drive - Suite A-134,
11
San Rafael, CA 94903, U.S.A., +1(415)492-9861, for further information.
14
/* $Id: gsalloc.h 8022 2007-06-05 22:23:38Z giles $ */
15
/* Memory allocator extensions for standard allocator */
17
#ifndef gsalloc_INCLUDED
18
# define gsalloc_INCLUDED
20
/* The following should not be needed at this level! */
22
#ifndef gs_ref_memory_DEFINED
23
# define gs_ref_memory_DEFINED
24
typedef struct gs_ref_memory_s gs_ref_memory_t;
28
* Define a structure and interface for GC-related allocator state.
30
typedef struct gs_memory_gc_status_s {
32
long vm_threshold; /* GC interval */
33
long max_vm; /* maximum allowed allocation */
34
int *psignal; /* if not NULL, store signal_value */
35
/* here if we go over the vm_threshold */
36
int signal_value; /* value to store in *psignal */
37
bool enabled; /* auto GC enabled if true */
38
/* Set by allocator */
39
long requested; /* amount of last failing request */
40
} gs_memory_gc_status_t;
41
void gs_memory_gc_status(const gs_ref_memory_t *, gs_memory_gc_status_t *);
42
void gs_memory_set_gc_status(gs_ref_memory_t *, const gs_memory_gc_status_t *);
43
void gs_memory_set_vm_threshold(gs_ref_memory_t * mem, long val);
44
void gs_memory_set_vm_reclaim(gs_ref_memory_t * mem, bool enabled);
46
/* ------ Initialization ------ */
49
* Allocate and mostly initialize the state of an allocator (system, global,
50
* or local). Does not initialize global or space.
52
gs_ref_memory_t *ialloc_alloc_state(gs_memory_t *, uint);
55
* Add a chunk to an externally controlled allocator. Such allocators
56
* allocate all objects as immovable, are not garbage-collected, and
57
* don't attempt to acquire additional memory (or free chunks) on their own.
59
int ialloc_add_chunk(gs_ref_memory_t *, ulong, client_name_t);
61
/* ------ Internal routines ------ */
63
/* Prepare for a GC. */
64
void ialloc_gc_prepare(gs_ref_memory_t *);
66
/* Initialize after a save. */
67
void ialloc_reset(gs_ref_memory_t *);
69
/* Initialize after a save or GC. */
70
void ialloc_reset_free(gs_ref_memory_t *);
72
/* Set the cached allocation limit of an alloctor from its GC parameters. */
73
void ialloc_set_limit(gs_ref_memory_t *);
75
/* Consolidate free objects. */
76
void ialloc_consolidate_free(gs_ref_memory_t *);
78
#endif /* gsalloc_INCLUDED */