diff options
author | Max Hirschhorn <max.hirschhorn@mongodb.com> | 2018-09-17 14:39:56 -0400 |
---|---|---|
committer | Max Hirschhorn <max.hirschhorn@mongodb.com> | 2018-09-17 14:39:56 -0400 |
commit | 12dba1e5b8c5ec7532da1bfa2e05c56f021d7f06 (patch) | |
tree | fb355ef6486e91f156773521f8ce3d9b2bbe11c2 /src/mongo/shell/bench.cpp | |
parent | c6d90316d6b694e12426274c713a4a078e004fc5 (diff) | |
download | mongo-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.cpp | 14 |
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 { |