diff options
author | Abseil Team <absl-team@google.com> | 2021-05-27 10:22:20 -0700 |
---|---|---|
committer | Dino Radaković <dinor@google.com> | 2021-05-27 18:34:59 +0000 |
commit | 0d5156018dd3d0d075cc14a0aa6078979c7a85d3 (patch) | |
tree | 3945b34fc8838ba453be4b9e936601c9cc13b35c /absl/base/internal/thread_identity.h | |
parent | 18045c4e32cbe6217224f46261b9e2607d6e723d (diff) | |
download | abseil-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.h | 17 |
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; } |