1 #ifndef JEMALLOC_INTERNAL_ECACHE_H 2 #define JEMALLOC_INTERNAL_ECACHE_H 3 4 #include "jemalloc/internal/eset.h" 5 #include "jemalloc/internal/san.h" 6 #include "jemalloc/internal/mutex.h" 7 8 typedef struct ecache_s ecache_t; 9 struct ecache_s { 10 malloc_mutex_t mtx; 11 eset_t eset; 12 eset_t guarded_eset; 13 /* All stored extents must be in the same state. */ 14 extent_state_t state; 15 /* The index of the ehooks the ecache is associated with. */ 16 unsigned ind; 17 /* 18 * If true, delay coalescing until eviction; otherwise coalesce during 19 * deallocation. 20 */ 21 bool delay_coalesce; 22 }; 23 24 static inline size_t 25 ecache_npages_get(ecache_t *ecache) { 26 return eset_npages_get(&ecache->eset) + 27 eset_npages_get(&ecache->guarded_eset); 28 } 29 30 /* Get the number of extents in the given page size index. */ 31 static inline size_t 32 ecache_nextents_get(ecache_t *ecache, pszind_t ind) { 33 return eset_nextents_get(&ecache->eset, ind) + 34 eset_nextents_get(&ecache->guarded_eset, ind); 35 } 36 37 /* Get the sum total bytes of the extents in the given page size index. */ 38 static inline size_t 39 ecache_nbytes_get(ecache_t *ecache, pszind_t ind) { 40 return eset_nbytes_get(&ecache->eset, ind) + 41 eset_nbytes_get(&ecache->guarded_eset, ind); 42 } 43 44 static inline unsigned 45 ecache_ind_get(ecache_t *ecache) { 46 return ecache->ind; 47 } 48 49 bool ecache_init(tsdn_t *tsdn, ecache_t *ecache, extent_state_t state, 50 unsigned ind, bool delay_coalesce); 51 void ecache_prefork(tsdn_t *tsdn, ecache_t *ecache); 52 void ecache_postfork_parent(tsdn_t *tsdn, ecache_t *ecache); 53 void ecache_postfork_child(tsdn_t *tsdn, ecache_t *ecache); 54 55 #endif /* JEMALLOC_INTERNAL_ECACHE_H */ 56