summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorAdam Midvidy <amidvidy@gmail.com>2015-09-16 14:00:25 -0400
committerAdam Midvidy <amidvidy@gmail.com>2015-09-16 17:37:28 -0400
commit640a127f2694a145a90fc85376a6172493cb36f0 (patch)
tree9fffe9b5018531c58527485870b2c4078e72b12d /src
parenteeb5452280d12e30c44fc1d8f0fc1d283b019ac8 (diff)
downloadmongo-640a127f2694a145a90fc85376a6172493cb36f0.tar.gz
SERVER-20190 add signalWorkAvailable to new exit point in startCommand
Diffstat (limited to 'src')
-rw-r--r--src/mongo/executor/network_interface_asio.cpp4
-rw-r--r--src/mongo/executor/network_interface_asio_command.cpp6
2 files changed, 5 insertions, 5 deletions
diff --git a/src/mongo/executor/network_interface_asio.cpp b/src/mongo/executor/network_interface_asio.cpp
index d0ce71ed8a9..1016f250e7c 100644
--- a/src/mongo/executor/network_interface_asio.cpp
+++ b/src/mongo/executor/network_interface_asio.cpp
@@ -161,13 +161,15 @@ void NetworkInterfaceASIO::startCommand(const TaskExecutor::CallbackHandle& cbHa
AsyncOp* op = nullptr;
{
- stdx::lock_guard<stdx::mutex> lk(_inProgressMutex);
+ stdx::unique_lock<stdx::mutex> lk(_inProgressMutex);
auto iter = std::find(_inGetConnection.begin(), _inGetConnection.end(), cbHandle);
// If we didn't find the request, we've been canceled
if (iter == _inGetConnection.end()) {
+ lk.unlock();
onFinish({ErrorCodes::CallbackCanceled, "Callback canceled"});
+ signalWorkAvailable();
return;
}
diff --git a/src/mongo/executor/network_interface_asio_command.cpp b/src/mongo/executor/network_interface_asio_command.cpp
index 3467f39304f..af85b54303e 100644
--- a/src/mongo/executor/network_interface_asio_command.cpp
+++ b/src/mongo/executor/network_interface_asio_command.cpp
@@ -259,10 +259,8 @@ void NetworkInterfaceASIO::_completeOperation(AsyncOp* op, const ResponseStatus&
auto iter = _inProgress.find(op);
- // We're in connection start
- if (iter == _inProgress.end()) {
- return;
- }
+ // If we're here, we should not have been canceled.
+ invariant(iter != _inProgress.end());
ownedOp = std::move(iter->second);
_inProgress.erase(iter);