huangcm
2024-12-18 9d29be7f7249789d6ffd0440067187a9f040c2cd
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
/******************************************************************************/
#ifdef JEMALLOC_H_TYPES
 
typedef struct quarantine_obj_s quarantine_obj_t;
typedef struct quarantine_s quarantine_t;
 
/* Default per thread quarantine size if valgrind is enabled. */
#define    JEMALLOC_VALGRIND_QUARANTINE_DEFAULT    (ZU(1) << 24)
 
#endif /* JEMALLOC_H_TYPES */
/******************************************************************************/
#ifdef JEMALLOC_H_STRUCTS
 
struct quarantine_obj_s {
   void    *ptr;
   size_t    usize;
};
 
struct quarantine_s {
   size_t            curbytes;
   size_t            curobjs;
   size_t            first;
#define    LG_MAXOBJS_INIT 10
   size_t            lg_maxobjs;
   quarantine_obj_t    objs[1]; /* Dynamically sized ring buffer. */
};
 
#endif /* JEMALLOC_H_STRUCTS */
/******************************************************************************/
#ifdef JEMALLOC_H_EXTERNS
 
void    quarantine_alloc_hook_work(tsd_t *tsd);
void    quarantine(tsd_t *tsd, void *ptr);
void    quarantine_cleanup(tsd_t *tsd);
 
#endif /* JEMALLOC_H_EXTERNS */
/******************************************************************************/
#ifdef JEMALLOC_H_INLINES
 
#ifndef JEMALLOC_ENABLE_INLINE
void    quarantine_alloc_hook(void);
#endif
 
#if (defined(JEMALLOC_ENABLE_INLINE) || defined(JEMALLOC_QUARANTINE_C_))
JEMALLOC_ALWAYS_INLINE void
quarantine_alloc_hook(void)
{
   tsd_t *tsd;
 
   assert(config_fill && opt_quarantine);
 
   tsd = tsd_fetch();
   if (tsd_quarantine_get(tsd) == NULL)
       quarantine_alloc_hook_work(tsd);
}
#endif
 
#endif /* JEMALLOC_H_INLINES */
/******************************************************************************/