Home | History | Annotate | Download | only in src
      1 #define	JEMALLOC_WITNESS_C_
      2 #include "jemalloc/internal/jemalloc_internal.h"
      3 
      4 void
      5 witness_init(witness_t *witness, const char *name, witness_rank_t rank,
      6     witness_comp_t *comp)
      7 {
      8 
      9 	witness->name = name;
     10 	witness->rank = rank;
     11 	witness->comp = comp;
     12 }
     13 
     14 #ifdef JEMALLOC_JET
     15 #undef witness_lock_error
     16 #define	witness_lock_error JEMALLOC_N(n_witness_lock_error)
     17 #endif
     18 void
     19 witness_lock_error(const witness_list_t *witnesses, const witness_t *witness)
     20 {
     21 	witness_t *w;
     22 
     23 	malloc_printf("<jemalloc>: Lock rank order reversal:");
     24 	ql_foreach(w, witnesses, link) {
     25 		malloc_printf(" %s(%u)", w->name, w->rank);
     26 	}
     27 	malloc_printf(" %s(%u)\n", witness->name, witness->rank);
     28 	abort();
     29 }
     30 #ifdef JEMALLOC_JET
     31 #undef witness_lock_error
     32 #define	witness_lock_error JEMALLOC_N(witness_lock_error)
     33 witness_lock_error_t *witness_lock_error = JEMALLOC_N(n_witness_lock_error);
     34 #endif
     35 
     36 #ifdef JEMALLOC_JET
     37 #undef witness_owner_error
     38 #define	witness_owner_error JEMALLOC_N(n_witness_owner_error)
     39 #endif
     40 void
     41 witness_owner_error(const witness_t *witness)
     42 {
     43 
     44 	malloc_printf("<jemalloc>: Should own %s(%u)\n", witness->name,
     45 	    witness->rank);
     46 	abort();
     47 }
     48 #ifdef JEMALLOC_JET
     49 #undef witness_owner_error
     50 #define	witness_owner_error JEMALLOC_N(witness_owner_error)
     51 witness_owner_error_t *witness_owner_error = JEMALLOC_N(n_witness_owner_error);
     52 #endif
     53 
     54 #ifdef JEMALLOC_JET
     55 #undef witness_not_owner_error
     56 #define	witness_not_owner_error JEMALLOC_N(n_witness_not_owner_error)
     57 #endif
     58 void
     59 witness_not_owner_error(const witness_t *witness)
     60 {
     61 
     62 	malloc_printf("<jemalloc>: Should not own %s(%u)\n", witness->name,
     63 	    witness->rank);
     64 	abort();
     65 }
     66 #ifdef JEMALLOC_JET
     67 #undef witness_not_owner_error
     68 #define	witness_not_owner_error JEMALLOC_N(witness_not_owner_error)
     69 witness_not_owner_error_t *witness_not_owner_error =
     70     JEMALLOC_N(n_witness_not_owner_error);
     71 #endif
     72 
     73 #ifdef JEMALLOC_JET
     74 #undef witness_lockless_error
     75 #define	witness_lockless_error JEMALLOC_N(n_witness_lockless_error)
     76 #endif
     77 void
     78 witness_lockless_error(const witness_list_t *witnesses)
     79 {
     80 	witness_t *w;
     81 
     82 	malloc_printf("<jemalloc>: Should not own any locks:");
     83 	ql_foreach(w, witnesses, link) {
     84 		malloc_printf(" %s(%u)", w->name, w->rank);
     85 	}
     86 	malloc_printf("\n");
     87 	abort();
     88 }
     89 #ifdef JEMALLOC_JET
     90 #undef witness_lockless_error
     91 #define	witness_lockless_error JEMALLOC_N(witness_lockless_error)
     92 witness_lockless_error_t *witness_lockless_error =
     93     JEMALLOC_N(n_witness_lockless_error);
     94 #endif
     95 
     96 void
     97 witnesses_cleanup(tsd_t *tsd)
     98 {
     99 
    100 	witness_assert_lockless(tsd_tsdn(tsd));
    101 
    102 	/* Do nothing. */
    103 }
    104 
    105 void
    106 witness_fork_cleanup(tsd_t *tsd)
    107 {
    108 
    109 	/* Do nothing. */
    110 }
    111 
    112 void
    113 witness_prefork(tsd_t *tsd)
    114 {
    115 
    116 	tsd_witness_fork_set(tsd, true);
    117 }
    118 
    119 void
    120 witness_postfork_parent(tsd_t *tsd)
    121 {
    122 
    123 	tsd_witness_fork_set(tsd, false);
    124 }
    125 
    126 void
    127 witness_postfork_child(tsd_t *tsd)
    128 {
    129 #ifndef JEMALLOC_MUTEX_INIT_CB
    130 	witness_list_t *witnesses;
    131 
    132 	witnesses = tsd_witnessesp_get(tsd);
    133 	ql_new(witnesses);
    134 #endif
    135 	tsd_witness_fork_set(tsd, false);
    136 }
    137