summaryrefslogtreecommitdiff
path: root/src/mongo/util/concurrency/thread_name.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mongo/util/concurrency/thread_name.cpp')
-rw-r--r--src/mongo/util/concurrency/thread_name.cpp68
1 files changed, 33 insertions, 35 deletions
diff --git a/src/mongo/util/concurrency/thread_name.cpp b/src/mongo/util/concurrency/thread_name.cpp
index c2d8f8f2b9d..8b2b66302b6 100644
--- a/src/mongo/util/concurrency/thread_name.cpp
+++ b/src/mongo/util/concurrency/thread_name.cpp
@@ -37,50 +37,48 @@
namespace mongo {
- using std::string;
+using std::string;
namespace {
- boost::thread_specific_ptr<std::string> threadName;
- AtomicInt64 nextUnnamedThreadId{1};
+boost::thread_specific_ptr<std::string> threadName;
+AtomicInt64 nextUnnamedThreadId{1};
- // It is unsafe to access threadName before its dynamic initialization has completed. Use
- // the execution of mongo initializers (which only happens once we have entered main, and
- // therefore after dynamic initialization is complete) to signal that it is safe to use
- // 'threadName'.
- bool mongoInitializersHaveRun{};
- MONGO_INITIALIZER(ThreadNameInitializer)(InitializerContext*) {
- mongoInitializersHaveRun = true;
- // The global initializers should only ever be run from main, so setting thread name
- // here makes sense.
- setThreadName("main");
- return Status::OK();
- }
+// It is unsafe to access threadName before its dynamic initialization has completed. Use
+// the execution of mongo initializers (which only happens once we have entered main, and
+// therefore after dynamic initialization is complete) to signal that it is safe to use
+// 'threadName'.
+bool mongoInitializersHaveRun{};
+MONGO_INITIALIZER(ThreadNameInitializer)(InitializerContext*) {
+ mongoInitializersHaveRun = true;
+ // The global initializers should only ever be run from main, so setting thread name
+ // here makes sense.
+ setThreadName("main");
+ return Status::OK();
+}
} // namespace
- void setThreadName(StringData name) {
- invariant(mongoInitializersHaveRun);
- threadName.reset(new string(name.toString()));
- }
-
- const string& getThreadName() {
+void setThreadName(StringData name) {
+ invariant(mongoInitializersHaveRun);
+ threadName.reset(new string(name.toString()));
+}
- if (MONGO_unlikely(!mongoInitializersHaveRun)) {
- // 'getThreadName' has been called before dynamic initialization for this
- // translation unit has completed, so return a fallback value rather than accessing
- // the 'threadName' variable, which requires dynamic initialization. We assume that
- // we are in the 'main' thread.
- static const std::string kFallback = "main";
- return kFallback;
- }
+const string& getThreadName() {
+ if (MONGO_unlikely(!mongoInitializersHaveRun)) {
+ // 'getThreadName' has been called before dynamic initialization for this
+ // translation unit has completed, so return a fallback value rather than accessing
+ // the 'threadName' variable, which requires dynamic initialization. We assume that
+ // we are in the 'main' thread.
+ static const std::string kFallback = "main";
+ return kFallback;
+ }
- std::string* s;
- while (!(s = threadName.get())) {
- setThreadName(
- std::string(str::stream() << "thread" << nextUnnamedThreadId.fetchAndAdd(1)));
- }
- return *s;
+ std::string* s;
+ while (!(s = threadName.get())) {
+ setThreadName(std::string(str::stream() << "thread" << nextUnnamedThreadId.fetchAndAdd(1)));
}
+ return *s;
+}
} // namespace mongo