01f47f11a6
This fixes tcache_flush for manual tcaches, which wasn't able to find the correct arena it associated with. Also changed the decay test to cover this case (by using manually created arenas).
57 lines
1.8 KiB
C
57 lines
1.8 KiB
C
#ifndef JEMALLOC_INTERNAL_TCACHE_STRUCTS_H
|
|
#define JEMALLOC_INTERNAL_TCACHE_STRUCTS_H
|
|
|
|
typedef enum {
|
|
tcache_enabled_false = 0, /* Enable cast to/from bool. */
|
|
tcache_enabled_true = 1,
|
|
tcache_enabled_default = 2
|
|
} tcache_enabled_t;
|
|
|
|
/*
|
|
* Read-only information associated with each element of tcache_t's tbins array
|
|
* is stored separately, mainly to reduce memory usage.
|
|
*/
|
|
struct tcache_bin_info_s {
|
|
unsigned ncached_max; /* Upper limit on ncached. */
|
|
};
|
|
|
|
struct tcache_bin_s {
|
|
tcache_bin_stats_t tstats;
|
|
int low_water; /* Min # cached since last GC. */
|
|
unsigned lg_fill_div; /* Fill (ncached_max >> lg_fill_div). */
|
|
unsigned ncached; /* # of cached objects. */
|
|
/*
|
|
* To make use of adjacent cacheline prefetch, the items in the avail
|
|
* stack goes to higher address for newer allocations. avail points
|
|
* just above the available space, which means that
|
|
* avail[-ncached, ... -1] are available items and the lowest item will
|
|
* be allocated first.
|
|
*/
|
|
void **avail; /* Stack of available objects. */
|
|
};
|
|
|
|
struct tcache_s {
|
|
ql_elm(tcache_t) link; /* Used for aggregating stats. */
|
|
uint64_t prof_accumbytes;/* Cleared after arena_prof_accum(). */
|
|
ticker_t gc_ticker; /* Drives incremental GC. */
|
|
szind_t next_gc_bin; /* Next bin to GC. */
|
|
arena_t *arena; /* Associated arena. */
|
|
tcache_bin_t tbins[1]; /* Dynamically sized. */
|
|
/*
|
|
* The pointer stacks associated with tbins follow as a contiguous
|
|
* array. During tcache initialization, the avail pointer in each
|
|
* element of tbins is initialized to point to the proper offset within
|
|
* this array.
|
|
*/
|
|
};
|
|
|
|
/* Linkage for list of available (previously used) explicit tcache IDs. */
|
|
struct tcaches_s {
|
|
union {
|
|
tcache_t *tcache;
|
|
tcaches_t *next;
|
|
};
|
|
};
|
|
|
|
#endif /* JEMALLOC_INTERNAL_TCACHE_STRUCTS_H */
|