summaryrefslogtreecommitdiff
path: root/src/mongo/transport/service_entry_point_utils.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mongo/transport/service_entry_point_utils.cpp')
-rw-r--r--src/mongo/transport/service_entry_point_utils.cpp11
1 files changed, 6 insertions, 5 deletions
diff --git a/src/mongo/transport/service_entry_point_utils.cpp b/src/mongo/transport/service_entry_point_utils.cpp
index f9489149ddf..f0c95a28dba 100644
--- a/src/mongo/transport/service_entry_point_utils.cpp
+++ b/src/mongo/transport/service_entry_point_utils.cpp
@@ -57,18 +57,19 @@ namespace mongo {
namespace {
void* runFunc(void* ctx) {
- std::unique_ptr<std::function<void()>> taskPtr(static_cast<std::function<void()>*>(ctx));
+ auto taskPtr =
+ std::unique_ptr<unique_function<void()>>(static_cast<unique_function<void()>*>(ctx));
(*taskPtr)();
return nullptr;
}
} // namespace
-Status launchServiceWorkerThread(std::function<void()> task) noexcept {
+Status launchServiceWorkerThread(unique_function<void()> task) noexcept {
try {
#if defined(_WIN32)
- stdx::thread(std::move(task)).detach();
+ stdx::thread([task = std::move(task)]() mutable { task(); }).detach();
#else
pthread_attr_t attrs;
pthread_attr_init(&attrs);
@@ -102,13 +103,13 @@ Status launchServiceWorkerThread(std::function<void()> task) noexcept {
// Wrap the user-specified `task` so it runs with an installed `sigaltstack`.
task = [sigAltStackController = std::make_shared<stdx::support::SigAltStackController>(),
- f = std::move(task)] {
+ f = std::move(task)]() mutable {
auto sigAltStackGuard = sigAltStackController->makeInstallGuard();
f();
};
pthread_t thread;
- auto ctx = std::make_unique<std::function<void()>>(std::move(task));
+ auto ctx = std::make_unique<unique_function<void()>>(std::move(task));
ThreadSafetyContext::getThreadSafetyContext()->onThreadCreate();
int failed = pthread_create(&thread, &attrs, runFunc, ctx.get());