1122449b073bcbaa504c4f592ea2d733503c272d2Jason Evans/******************************************************************************/ 2122449b073bcbaa504c4f592ea2d733503c272d2Jason Evans#ifdef JEMALLOC_H_TYPES 3122449b073bcbaa504c4f592ea2d733503c272d2Jason Evans 4bbe29d374d0fa5f4684621f16c099294e56c26efJason Evanstypedef struct quarantine_obj_s quarantine_obj_t; 5bbe29d374d0fa5f4684621f16c099294e56c26efJason Evanstypedef struct quarantine_s quarantine_t; 6bbe29d374d0fa5f4684621f16c099294e56c26efJason Evans 7122449b073bcbaa504c4f592ea2d733503c272d2Jason Evans/* Default per thread quarantine size if valgrind is enabled. */ 8122449b073bcbaa504c4f592ea2d733503c272d2Jason Evans#define JEMALLOC_VALGRIND_QUARANTINE_DEFAULT (ZU(1) << 24) 9122449b073bcbaa504c4f592ea2d733503c272d2Jason Evans 10122449b073bcbaa504c4f592ea2d733503c272d2Jason Evans#endif /* JEMALLOC_H_TYPES */ 11122449b073bcbaa504c4f592ea2d733503c272d2Jason Evans/******************************************************************************/ 12122449b073bcbaa504c4f592ea2d733503c272d2Jason Evans#ifdef JEMALLOC_H_STRUCTS 13122449b073bcbaa504c4f592ea2d733503c272d2Jason Evans 14bbe29d374d0fa5f4684621f16c099294e56c26efJason Evansstruct quarantine_obj_s { 15bbe29d374d0fa5f4684621f16c099294e56c26efJason Evans void *ptr; 16bbe29d374d0fa5f4684621f16c099294e56c26efJason Evans size_t usize; 17bbe29d374d0fa5f4684621f16c099294e56c26efJason Evans}; 18bbe29d374d0fa5f4684621f16c099294e56c26efJason Evans 19bbe29d374d0fa5f4684621f16c099294e56c26efJason Evansstruct quarantine_s { 20bbe29d374d0fa5f4684621f16c099294e56c26efJason Evans size_t curbytes; 21bbe29d374d0fa5f4684621f16c099294e56c26efJason Evans size_t curobjs; 22bbe29d374d0fa5f4684621f16c099294e56c26efJason Evans size_t first; 23bbe29d374d0fa5f4684621f16c099294e56c26efJason Evans#define LG_MAXOBJS_INIT 10 24bbe29d374d0fa5f4684621f16c099294e56c26efJason Evans size_t lg_maxobjs; 25bbe29d374d0fa5f4684621f16c099294e56c26efJason Evans quarantine_obj_t objs[1]; /* Dynamically sized ring buffer. */ 26bbe29d374d0fa5f4684621f16c099294e56c26efJason Evans}; 27bbe29d374d0fa5f4684621f16c099294e56c26efJason Evans 28122449b073bcbaa504c4f592ea2d733503c272d2Jason Evans#endif /* JEMALLOC_H_STRUCTS */ 29122449b073bcbaa504c4f592ea2d733503c272d2Jason Evans/******************************************************************************/ 30122449b073bcbaa504c4f592ea2d733503c272d2Jason Evans#ifdef JEMALLOC_H_EXTERNS 31122449b073bcbaa504c4f592ea2d733503c272d2Jason Evans 3283e5767ee9a8c68150cca06ae0d27a13ba4fcaf8Christopher Ferrisvoid quarantine_alloc_hook_work(tsd_t *tsd); 3383e5767ee9a8c68150cca06ae0d27a13ba4fcaf8Christopher Ferrisvoid quarantine(tsd_t *tsd, void *ptr); 3483e5767ee9a8c68150cca06ae0d27a13ba4fcaf8Christopher Ferrisvoid quarantine_cleanup(tsd_t *tsd); 35122449b073bcbaa504c4f592ea2d733503c272d2Jason Evans 36122449b073bcbaa504c4f592ea2d733503c272d2Jason Evans#endif /* JEMALLOC_H_EXTERNS */ 37122449b073bcbaa504c4f592ea2d733503c272d2Jason Evans/******************************************************************************/ 38122449b073bcbaa504c4f592ea2d733503c272d2Jason Evans#ifdef JEMALLOC_H_INLINES 39122449b073bcbaa504c4f592ea2d733503c272d2Jason Evans 40bbe29d374d0fa5f4684621f16c099294e56c26efJason Evans#ifndef JEMALLOC_ENABLE_INLINE 41bbe29d374d0fa5f4684621f16c099294e56c26efJason Evansvoid quarantine_alloc_hook(void); 42bbe29d374d0fa5f4684621f16c099294e56c26efJason Evans#endif 43bbe29d374d0fa5f4684621f16c099294e56c26efJason Evans 44bbe29d374d0fa5f4684621f16c099294e56c26efJason Evans#if (defined(JEMALLOC_ENABLE_INLINE) || defined(JEMALLOC_QUARANTINE_C_)) 45bbe29d374d0fa5f4684621f16c099294e56c26efJason EvansJEMALLOC_ALWAYS_INLINE void 46bbe29d374d0fa5f4684621f16c099294e56c26efJason Evansquarantine_alloc_hook(void) 47bbe29d374d0fa5f4684621f16c099294e56c26efJason Evans{ 4883e5767ee9a8c68150cca06ae0d27a13ba4fcaf8Christopher Ferris tsd_t *tsd; 49bbe29d374d0fa5f4684621f16c099294e56c26efJason Evans 50bbe29d374d0fa5f4684621f16c099294e56c26efJason Evans assert(config_fill && opt_quarantine); 51bbe29d374d0fa5f4684621f16c099294e56c26efJason Evans 5283e5767ee9a8c68150cca06ae0d27a13ba4fcaf8Christopher Ferris tsd = tsd_fetch(); 5383e5767ee9a8c68150cca06ae0d27a13ba4fcaf8Christopher Ferris if (tsd_quarantine_get(tsd) == NULL) 5483e5767ee9a8c68150cca06ae0d27a13ba4fcaf8Christopher Ferris quarantine_alloc_hook_work(tsd); 55bbe29d374d0fa5f4684621f16c099294e56c26efJason Evans} 56bbe29d374d0fa5f4684621f16c099294e56c26efJason Evans#endif 57bbe29d374d0fa5f4684621f16c099294e56c26efJason Evans 58122449b073bcbaa504c4f592ea2d733503c272d2Jason Evans#endif /* JEMALLOC_H_INLINES */ 59122449b073bcbaa504c4f592ea2d733503c272d2Jason Evans/******************************************************************************/ 60122449b073bcbaa504c4f592ea2d733503c272d2Jason Evans 61