]>
Commit | Line | Data |
---|---|---|
3b2f2976 XL |
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_depth_error | |
75 | #define witness_depth_error JEMALLOC_N(n_witness_depth_error) | |
76 | #endif | |
77 | void | |
78 | witness_depth_error(const witness_list_t *witnesses, | |
79 | witness_rank_t rank_inclusive, unsigned depth) { | |
80 | witness_t *w; | |
81 | ||
82 | malloc_printf("<jemalloc>: Should own %u lock%s of rank >= %u:", depth, | |
83 | (depth != 1) ? "s" : "", rank_inclusive); | |
84 | ql_foreach(w, witnesses, link) { | |
85 | malloc_printf(" %s(%u)", w->name, w->rank); | |
86 | } | |
87 | malloc_printf("\n"); | |
88 | abort(); | |
89 | } | |
90 | #ifdef JEMALLOC_JET | |
91 | #undef witness_depth_error | |
92 | #define witness_depth_error JEMALLOC_N(witness_depth_error) | |
93 | witness_depth_error_t *witness_depth_error = JEMALLOC_N(n_witness_depth_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 | } |