summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/mongo/util/fail_point.cpp10
-rw-r--r--src/mongo/util/fail_point.h2
2 files changed, 11 insertions, 1 deletions
diff --git a/src/mongo/util/fail_point.cpp b/src/mongo/util/fail_point.cpp
index b705e6a01bf..7761f3a697a 100644
--- a/src/mongo/util/fail_point.cpp
+++ b/src/mongo/util/fail_point.cpp
@@ -89,7 +89,7 @@ void FailPoint::shouldFailCloseBlock() {
}
bool FailPoint::isSynced() const {
- if (_syncConfig.waitFor.size() == 0)
+ if (_syncConfig.waitFor.empty())
return true;
for (auto w : _syncConfig.waitFor) {
if (_activeSignals.find(w) == _activeSignals.end()) {
@@ -117,6 +117,11 @@ void FailPoint::sync() const {
while (!isSynced()) {
_condVar.wait_for(lk, timeout.toSystemDuration());
}
+ if (_syncConfig.clearSignals && !_syncConfig.waitFor.empty()) {
+ for (auto& w : _syncConfig.waitFor) {
+ _activeSignals.erase(w);
+ }
+ }
}
void FailPoint::setMode(Mode mode,
@@ -330,6 +335,9 @@ FailPoint::parseBSON(const BSONObj& obj) {
syncConfig.waitFor.insert(e.String());
}
}
+ if (syncObj.hasField("clearSignals")) {
+ syncConfig.clearSignals = syncObj["clearSignals"].Bool();
+ }
syncConfig.enabled = true;
}
diff --git a/src/mongo/util/fail_point.h b/src/mongo/util/fail_point.h
index 832d90349ef..6c8abc05e5d 100644
--- a/src/mongo/util/fail_point.h
+++ b/src/mongo/util/fail_point.h
@@ -85,6 +85,8 @@ public:
std::unordered_set<std::string> signals;
// Signals to wait for when the failpoint is reached.
std::unordered_set<std::string> waitFor;
+ // Clear waitFor signals afterwards.
+ bool clearSignals = false;
};
/**