diff options
author | Billy Donahue <billy.donahue@mongodb.com> | 2021-06-05 21:36:12 -0400 |
---|---|---|
committer | Evergreen Agent <no-reply@evergreen.mongodb.com> | 2021-06-07 19:14:09 +0000 |
commit | 0fec5e0d4364d00d30ecb3493c611e9f325bbf9a (patch) | |
tree | 0ddba07385b209d057fea23c5e26d4f709c78ca6 /src/mongo/db/stats | |
parent | 116fc60f5ac5bb5d2faf80624399efcdea79e408 (diff) | |
download | mongo-0fec5e0d4364d00d30ecb3493c611e9f325bbf9a.tar.gz |
SERVER-57480 invalid iterators in APIVersionMetrics
Diffstat (limited to 'src/mongo/db/stats')
-rw-r--r-- | src/mongo/db/stats/api_version_metrics.cpp | 15 |
1 files changed, 9 insertions, 6 deletions
diff --git a/src/mongo/db/stats/api_version_metrics.cpp b/src/mongo/db/stats/api_version_metrics.cpp index 38c38bfe66b..959e5b9e3f6 100644 --- a/src/mongo/db/stats/api_version_metrics.cpp +++ b/src/mongo/db/stats/api_version_metrics.cpp @@ -53,24 +53,27 @@ void APIVersionMetrics::update(std::string appName, const APIParameters& apiPara } void APIVersionMetrics::_removeStaleTimestamps(WithLock lk, Date_t now) { - for (auto appNameIter = _apiVersionMetrics.begin(); appNameIter != _apiVersionMetrics.end(); - appNameIter++) { + for (auto appNameIter = _apiVersionMetrics.begin(); appNameIter != _apiVersionMetrics.end();) { auto& versionTimestamps = appNameIter->second; - for (auto versionIter = versionTimestamps.begin(); versionIter != versionTimestamps.end(); - versionIter++) { + for (auto versionIter = versionTimestamps.begin(); + versionIter != versionTimestamps.end();) { auto timestamp = versionIter->second; // Remove any timestamps that are more than one day old. if (now - Days(1) > timestamp) { - versionTimestamps.erase(versionIter); + versionTimestamps.erase(versionIter++); + } else { + ++versionIter; } } // If there are no more timestamps for an application, remove the map associated with // application name. if (appNameIter->second.empty()) { - _apiVersionMetrics.erase(appNameIter); + _apiVersionMetrics.erase(appNameIter++); + } else { + ++appNameIter; } } } |