diff options
author | Andrew Morrow <acm@mongodb.com> | 2017-02-26 15:15:08 -0500 |
---|---|---|
committer | Andrew Morrow <acm@mongodb.com> | 2017-08-02 23:29:55 -0400 |
commit | a8a1ea3b9367adb6d0b65a7da21fed89598ea093 (patch) | |
tree | 8e969ed54b88c2a9c4c2d45a6518d053ac9f4265 /src/mongo/db/client.cpp | |
parent | c02c14e30d75b02894da116f4bb1a71652ead2b4 (diff) | |
download | mongo-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.cpp | 17 |
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 |