]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - contrib/jemalloc/src/witness.c
MFV r302423:
[FreeBSD/FreeBSD.git] / contrib / jemalloc / src / witness.c
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 }