Home | History | Annotate | Download | only in internal
      1 /******************************************************************************/
      2 #ifdef JEMALLOC_H_TYPES
      3 
      4 typedef struct quarantine_obj_s quarantine_obj_t;
      5 typedef struct quarantine_s quarantine_t;
      6 
      7 /* Default per thread quarantine size if valgrind is enabled. */
      8 #define	JEMALLOC_VALGRIND_QUARANTINE_DEFAULT	(ZU(1) << 24)
      9 
     10 #endif /* JEMALLOC_H_TYPES */
     11 /******************************************************************************/
     12 #ifdef JEMALLOC_H_STRUCTS
     13 
     14 struct quarantine_obj_s {
     15 	void	*ptr;
     16 	size_t	usize;
     17 };
     18 
     19 struct quarantine_s {
     20 	size_t			curbytes;
     21 	size_t			curobjs;
     22 	size_t			first;
     23 #define	LG_MAXOBJS_INIT 10
     24 	size_t			lg_maxobjs;
     25 	quarantine_obj_t	objs[1]; /* Dynamically sized ring buffer. */
     26 };
     27 
     28 #endif /* JEMALLOC_H_STRUCTS */
     29 /******************************************************************************/
     30 #ifdef JEMALLOC_H_EXTERNS
     31 
     32 quarantine_t	*quarantine_init(size_t lg_maxobjs);
     33 void	quarantine(void *ptr);
     34 void	quarantine_cleanup(void *arg);
     35 bool	quarantine_boot(void);
     36 
     37 #endif /* JEMALLOC_H_EXTERNS */
     38 /******************************************************************************/
     39 #ifdef JEMALLOC_H_INLINES
     40 
     41 #ifndef JEMALLOC_ENABLE_INLINE
     42 malloc_tsd_protos(JEMALLOC_ATTR(unused), quarantine, quarantine_t *)
     43 
     44 void	quarantine_alloc_hook(void);
     45 #endif
     46 
     47 #if (defined(JEMALLOC_ENABLE_INLINE) || defined(JEMALLOC_QUARANTINE_C_))
     48 malloc_tsd_externs(quarantine, quarantine_t *)
     49 malloc_tsd_funcs(JEMALLOC_ALWAYS_INLINE, quarantine, quarantine_t *, NULL,
     50     quarantine_cleanup)
     51 
     52 JEMALLOC_ALWAYS_INLINE void
     53 quarantine_alloc_hook(void)
     54 {
     55 	quarantine_t *quarantine;
     56 
     57 	assert(config_fill && opt_quarantine);
     58 
     59 	quarantine = *quarantine_tsd_get();
     60 	if (quarantine == NULL)
     61 		quarantine_init(LG_MAXOBJS_INIT);
     62 }
     63 #endif
     64 
     65 #endif /* JEMALLOC_H_INLINES */
     66 /******************************************************************************/
     67 
     68