diff options
author | Adam Midvidy <amidvidy@gmail.com> | 2015-11-23 17:58:08 -0500 |
---|---|---|
committer | Adam Midvidy <amidvidy@gmail.com> | 2015-11-24 11:29:43 -0500 |
commit | 4f4cf16be11d2820974c1d6a0e95c9af3281e2d1 (patch) | |
tree | 86c80ed435ecd4d9ca0223c4a8ab462b508ef44f | |
parent | 160de93cc00ad5162dc8a344a4c067ff75bf577e (diff) | |
download | mongo-4f4cf16be11d2820974c1d6a0e95c9af3281e2d1.tar.gz |
SERVER-21640 fix race in getting size of _serviceRunners in NetworkInterfaceASIO
-rw-r--r-- | src/mongo/executor/network_interface_asio.cpp | 32 |
1 files changed, 15 insertions, 17 deletions
diff --git a/src/mongo/executor/network_interface_asio.cpp b/src/mongo/executor/network_interface_asio.cpp index 776b372e9bd..b609c368269 100644 --- a/src/mongo/executor/network_interface_asio.cpp +++ b/src/mongo/executor/network_interface_asio.cpp @@ -105,23 +105,21 @@ std::string NetworkInterfaceASIO::getHostName() { } void NetworkInterfaceASIO::startup() { - std::generate_n(std::back_inserter(_serviceRunners), - kIOServiceWorkers, - [&] { - return stdx::thread([this]() { - setThreadName(_options.instanceName + "-" + - std::to_string(_serviceRunners.size())); - try { - LOG(2) << "The NetworkInterfaceASIO worker thread is spinning up"; - asio::io_service::work work(_io_service); - _io_service.run(); - } catch (...) { - severe() << "Uncaught exception in NetworkInterfaceASIO IO " - "worker thread of type: " << exceptionToStatus(); - fassertFailed(28820); - } - }); - }); + _serviceRunners.resize(kIOServiceWorkers); + for (std::size_t i = 0; i < kIOServiceWorkers; ++i) { + _serviceRunners[i] = stdx::thread([this, i]() { + setThreadName(_options.instanceName + "-" + std::to_string(i)); + try { + LOG(2) << "The NetworkInterfaceASIO worker thread is spinning up"; + asio::io_service::work work(_io_service); + _io_service.run(); + } catch (...) { + severe() << "Uncaught exception in NetworkInterfaceASIO IO " + "worker thread of type: " << exceptionToStatus(); + fassertFailed(28820); + } + }); + }; _state.store(State::kRunning); } |