Fix a bug in the destruction of BenchmarkFamilies.
diff --git a/src/benchmark.cc b/src/benchmark.cc
index eb49548..96072e5 100644
--- a/src/benchmark.cc
+++ b/src/benchmark.cc
@@ -343,6 +343,14 @@
int BenchmarkFamilies::AddBenchmark(Benchmark* family) {
mutex_lock l(&benchmark_mutex);
+ // This loop attempts to reuse an entry that was previously removed to avoid
+ // unncessary growth of the vector.
+ for (int index = 0; index < families_.size(); ++index) {
+ if (families_[index] == nullptr) {
+ families_[index] = family;
+ return index;
+ }
+ }
int index = families_.size();
families_.push_back(family);
return index;
@@ -351,11 +359,8 @@
void BenchmarkFamilies::RemoveBenchmark(int index) {
mutex_lock l(&benchmark_mutex);
families_[index] = NULL;
-
- // Shrink the vector if convenient.
- while (!families_.empty() && families_.back() == NULL) {
- families_.pop_back();
- }
+ // Don't shrink families_ here, we might be called by the destructor of
+ // BenchmarkFamilies which iterates over the vector.
}
void BenchmarkFamilies::FindBenchmarks(