@@ -21,10 +21,20 @@ Timings::Timings() {
21
21
reset ();
22
22
}
23
23
24
- void Timings::reset () {
24
+ Timings::~Timings () {
25
+ std::lock_guard<std::mutex> lg (histogram_mutex);
25
26
for (auto & t : timings) {
26
- if (t) {
27
- t->reset ();
27
+ delete t;
28
+ }
29
+ }
30
+
31
+ void Timings::reset () {
32
+ {
33
+ std::lock_guard<std::mutex> lg (histogram_mutex);
34
+ for (auto & t : timings) {
35
+ if (t) {
36
+ t.load ()->reset ();
37
+ }
28
38
}
29
39
}
30
40
@@ -50,7 +60,7 @@ void Timings::collect(cb::mcbp::ClientOpcode opcode,
50
60
std::string Timings::generate (cb::mcbp::ClientOpcode opcode) {
51
61
auto * histoPtr =
52
62
timings[std::underlying_type<cb::mcbp::ClientOpcode>::type (opcode)]
53
- .get ();
63
+ .load ();
54
64
if (histoPtr) {
55
65
return histoPtr->to_string ();
56
66
}
@@ -109,7 +119,7 @@ uint64_t Timings::get_aggregated_mutation_stats() {
109
119
for (auto cmd : timings_mutations) {
110
120
auto * histoPtr =
111
121
timings[std::underlying_type<cb::mcbp::ClientOpcode>::type (cmd)]
112
- .get ();
122
+ .load ();
113
123
if (histoPtr) {
114
124
ret += histoPtr->getValueCount ();
115
125
}
@@ -123,7 +133,7 @@ uint64_t Timings::get_aggregated_retrival_stats() {
123
133
for (auto cmd : timings_retrievals) {
124
134
auto * histoPtr =
125
135
timings[std::underlying_type<cb::mcbp::ClientOpcode>::type (cmd)]
126
- .get ();
136
+ .load ();
127
137
if (histoPtr) {
128
138
ret += histoPtr->getValueCount ();
129
139
}
@@ -143,17 +153,17 @@ cb::sampling::Interval Timings::get_interval_lookup_latency() {
143
153
144
154
Hdr1sfMicroSecHistogram& Timings::get_or_create_timing_histogram (
145
155
uint8_t opcode) {
146
- if (timings[opcode] == nullptr ) {
156
+ if (! timings[opcode]) {
147
157
std::lock_guard<std::mutex> allocLock (histogram_mutex);
148
- if (timings[opcode] == nullptr ) {
149
- timings[opcode] = std::make_unique< Hdr1sfMicroSecHistogram> ();
158
+ if (! timings[opcode]) {
159
+ timings[opcode] = new Hdr1sfMicroSecHistogram ();
150
160
}
151
161
}
152
- return *timings[opcode];
162
+ return *( timings[opcode]. load ()) ;
153
163
}
154
164
155
165
Hdr1sfMicroSecHistogram* Timings::get_timing_histogram (uint8_t opcode) const {
156
- return timings[opcode].get ();
166
+ return timings[opcode].load ();
157
167
}
158
168
159
169
void Timings::sample (std::chrono::seconds sample_interval) {
0 commit comments