summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAdam Midvidy <amidvidy@gmail.com>2015-11-23 17:58:08 -0500
committerAdam Midvidy <amidvidy@gmail.com>2015-11-24 11:29:43 -0500
commit4f4cf16be11d2820974c1d6a0e95c9af3281e2d1 (patch)
tree86c80ed435ecd4d9ca0223c4a8ab462b508ef44f
parent160de93cc00ad5162dc8a344a4c067ff75bf577e (diff)
downloadmongo-4f4cf16be11d2820974c1d6a0e95c9af3281e2d1.tar.gz
SERVER-21640 fix race in getting size of _serviceRunners in NetworkInterfaceASIO
-rw-r--r--src/mongo/executor/network_interface_asio.cpp32
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);
}