summaryrefslogtreecommitdiff
path: root/src/mongo/db/client.cpp
diff options
context:
space:
mode:
authorAndrew Morrow <acm@mongodb.com>2017-02-26 15:15:08 -0500
committerAndrew Morrow <acm@mongodb.com>2017-08-02 23:29:55 -0400
commita8a1ea3b9367adb6d0b65a7da21fed89598ea093 (patch)
tree8e969ed54b88c2a9c4c2d45a6518d053ac9f4265 /src/mongo/db/client.cpp
parentc02c14e30d75b02894da116f4bb1a71652ead2b4 (diff)
downloadmongo-a8a1ea3b9367adb6d0b65a7da21fed89598ea093.tar.gz
SERVER-26538 SERVER-26539 Detach from boost::thread
Also, use thread_local everywhere for our thread specific data needs and remove the legacy support.
Diffstat (limited to 'src/mongo/db/client.cpp')
-rw-r--r--src/mongo/db/client.cpp17
1 files changed, 9 insertions, 8 deletions
diff --git a/src/mongo/db/client.cpp b/src/mongo/db/client.cpp
index ac195c79606..24f73349006 100644
--- a/src/mongo/db/client.cpp
+++ b/src/mongo/db/client.cpp
@@ -50,11 +50,12 @@
namespace mongo {
-TSP_DECLARE(ServiceContext::UniqueClient, currentClient)
-TSP_DEFINE(ServiceContext::UniqueClient, currentClient)
+namespace {
+thread_local ServiceContext::UniqueClient currentClient;
+} // namespace
void Client::initThreadIfNotAlready(StringData desc) {
- if (currentClient.getMake()->get())
+ if (currentClient)
return;
initThread(desc);
}
@@ -82,7 +83,7 @@ void Client::initThread(StringData desc,
setThreadName(fullDesc);
// Create the client obj, attach to thread
- *currentClient.getMake() = service->makeClient(fullDesc, std::move(session));
+ currentClient = service->makeClient(fullDesc, std::move(session));
}
void Client::destroy() {
@@ -149,7 +150,7 @@ std::string Client::clientAddress(bool includePort) const {
}
Client* Client::getCurrent() {
- return currentClient.getMake()->get();
+ return currentClient.get();
}
Client& cc() {
@@ -158,17 +159,17 @@ Client& cc() {
}
bool haveClient() {
- return currentClient.get() && currentClient.get()->get();
+ return static_cast<bool>(currentClient);
}
ServiceContext::UniqueClient Client::releaseCurrent() {
invariant(haveClient());
- return ServiceContext::UniqueClient(currentClient.get()->release());
+ return std::move(currentClient);
}
void Client::setCurrent(ServiceContext::UniqueClient client) {
invariant(!haveClient());
- *currentClient.getMake() = std::move(client);
+ currentClient = std::move(client);
}
} // namespace mongo