summaryrefslogtreecommitdiff
path: root/src/mongo/shell/bench.cpp
diff options
context:
space:
mode:
authorMax Hirschhorn <max.hirschhorn@mongodb.com>2018-09-17 14:39:56 -0400
committerMax Hirschhorn <max.hirschhorn@mongodb.com>2018-09-17 14:39:56 -0400
commit12dba1e5b8c5ec7532da1bfa2e05c56f021d7f06 (patch)
treefb355ef6486e91f156773521f8ce3d9b2bbe11c2 /src/mongo/shell/bench.cpp
parentc6d90316d6b694e12426274c713a4a078e004fc5 (diff)
downloadmongo-12dba1e5b8c5ec7532da1bfa2e05c56f021d7f06.tar.gz
SERVER-37156 Wait for worker threads to exit in benchRun().
Diffstat (limited to 'src/mongo/shell/bench.cpp')
-rw-r--r--src/mongo/shell/bench.cpp14
1 files changed, 12 insertions, 2 deletions
diff --git a/src/mongo/shell/bench.cpp b/src/mongo/shell/bench.cpp
index 197cbf336dd..5ad2f5c0b0a 100644
--- a/src/mongo/shell/bench.cpp
+++ b/src/mongo/shell/bench.cpp
@@ -828,10 +828,20 @@ BenchRunWorker::BenchRunWorker(size_t id,
int64_t randomSeed)
: _id(id), _config(config), _brState(brState), _rng(randomSeed) {}
-BenchRunWorker::~BenchRunWorker() = default;
+BenchRunWorker::~BenchRunWorker() {
+ try {
+ // We explicitly call join() on the started thread to ensure that any thread-local variables
+ // (e.g. 'currentClient' when running through mongoebench) have been destructed before
+ // returning from BenchRunWorker's destructor.
+ _thread.join();
+ } catch (...) {
+ severe() << "caught exception in destructor: " << exceptionToStatus();
+ std::terminate();
+ }
+}
void BenchRunWorker::start() {
- stdx::thread([this] { run(); }).detach();
+ _thread = stdx::thread([this] { run(); });
}
bool BenchRunWorker::shouldStop() const {