aboutsummaryrefslogtreecommitdiff
path: root/absl/base/internal/thread_identity.h
diff options
context:
space:
mode:
authorAbseil Team <absl-team@google.com>2021-05-27 10:22:20 -0700
committerDino Radaković <dinor@google.com>2021-05-27 18:34:59 +0000
commit0d5156018dd3d0d075cc14a0aa6078979c7a85d3 (patch)
tree3945b34fc8838ba453be4b9e936601c9cc13b35c /absl/base/internal/thread_identity.h
parent18045c4e32cbe6217224f46261b9e2607d6e723d (diff)
downloadabseil-0d5156018dd3d0d075cc14a0aa6078979c7a85d3.tar.gz
abseil-0d5156018dd3d0d075cc14a0aa6078979c7a85d3.tar.bz2
abseil-0d5156018dd3d0d075cc14a0aa6078979c7a85d3.zip
Export of internal Abseil changes
-- cbd86b318ce206d1fe9eb001979b8d2efe57e5fa by Derek Mauro <dmauro@google.com>: Stop inlining `CurrentThreadIdentityIfPresent()` on Apple platforms In some build configurations the Apple linker rejects thread_local variables exposed in headers Fixes #954 Fixes #965 PiperOrigin-RevId: 375930997 GitOrigin-RevId: e34600e09f748b686d20a4f729ae914ebfd9e7bf Change-Id: I9fcd2f02bd6abdea3ed412217e1be18f2c7bf762
Diffstat (limited to 'absl/base/internal/thread_identity.h')
-rw-r--r--absl/base/internal/thread_identity.h17
1 files changed, 11 insertions, 6 deletions
diff --git a/absl/base/internal/thread_identity.h b/absl/base/internal/thread_identity.h
index 9ee651a3..6e25b92f 100644
--- a/absl/base/internal/thread_identity.h
+++ b/absl/base/internal/thread_identity.h
@@ -236,13 +236,18 @@ ABSL_CONST_INIT extern thread_local ThreadIdentity* thread_identity_ptr;
#error Thread-local storage not detected on this platform
#endif
-// thread_local variables cannot be in headers exposed by DLLs. However, it is
-// important for performance reasons in general that
-// `CurrentThreadIdentityIfPresent` be inlined. This is not possible across a
-// DLL boundary so, with DLLs, we opt to have the function not be inlined. Note
+// thread_local variables cannot be in headers exposed by DLLs or in certain
+// build configurations on Apple platforms. However, it is important for
+// performance reasons in general that `CurrentThreadIdentityIfPresent` be
+// inlined. In the other cases we opt to have the function not be inlined. Note
// that `CurrentThreadIdentityIfPresent` is declared above so we can exclude
-// this entire inline definition when compiling as a DLL.
-#if !defined(ABSL_BUILD_DLL) && !defined(ABSL_CONSUME_DLL)
+// this entire inline definition.
+#if !defined(__APPLE__) && !defined(ABSL_BUILD_DLL) && \
+ !defined(ABSL_CONSUME_DLL)
+#define ABSL_INTERNAL_INLINE_CURRENT_THREAD_IDENTITY_IF_PRESENT 1
+#endif
+
+#ifdef ABSL_INTERNAL_INLINE_CURRENT_THREAD_IDENTITY_IF_PRESENT
inline ThreadIdentity* CurrentThreadIdentityIfPresent() {
return thread_identity_ptr;
}