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