]> git.proxmox.com Git - rustc.git/blob - src/jemalloc/src/witness.c
New upstream version 1.22.1+dfsg1
[rustc.git] / src / 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_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 }