Home | History | Annotate | Line # | Download | only in internal
      1 #ifndef JEMALLOC_INTERNAL_EDATA_CACHE_H
      2 #define JEMALLOC_INTERNAL_EDATA_CACHE_H
      3 
      4 #include "jemalloc/internal/base.h"
      5 
      6 /* For tests only. */
      7 #define EDATA_CACHE_FAST_FILL 4
      8 
      9 /*
     10  * A cache of edata_t structures allocated via base_alloc_edata (as opposed to
     11  * the underlying extents they describe).  The contents of returned edata_t
     12  * objects are garbage and cannot be relied upon.
     13  */
     14 
     15 typedef struct edata_cache_s edata_cache_t;
     16 struct edata_cache_s {
     17 	edata_avail_t avail;
     18 	atomic_zu_t count;
     19 	malloc_mutex_t mtx;
     20 	base_t *base;
     21 };
     22 
     23 bool edata_cache_init(edata_cache_t *edata_cache, base_t *base);
     24 edata_t *edata_cache_get(tsdn_t *tsdn, edata_cache_t *edata_cache);
     25 void edata_cache_put(tsdn_t *tsdn, edata_cache_t *edata_cache, edata_t *edata);
     26 
     27 void edata_cache_prefork(tsdn_t *tsdn, edata_cache_t *edata_cache);
     28 void edata_cache_postfork_parent(tsdn_t *tsdn, edata_cache_t *edata_cache);
     29 void edata_cache_postfork_child(tsdn_t *tsdn, edata_cache_t *edata_cache);
     30 
     31 /*
     32  * An edata_cache_small is like an edata_cache, but it relies on external
     33  * synchronization and avoids first-fit strategies.
     34  */
     35 
     36 typedef struct edata_cache_fast_s edata_cache_fast_t;
     37 struct edata_cache_fast_s {
     38 	edata_list_inactive_t list;
     39 	edata_cache_t *fallback;
     40 	bool disabled;
     41 };
     42 
     43 void edata_cache_fast_init(edata_cache_fast_t *ecs, edata_cache_t *fallback);
     44 edata_t *edata_cache_fast_get(tsdn_t *tsdn, edata_cache_fast_t *ecs);
     45 void edata_cache_fast_put(tsdn_t *tsdn, edata_cache_fast_t *ecs,
     46     edata_t *edata);
     47 void edata_cache_fast_disable(tsdn_t *tsdn, edata_cache_fast_t *ecs);
     48 
     49 #endif /* JEMALLOC_INTERNAL_EDATA_CACHE_H */
     50