Use the same ABI for static and shared libraries on non-Windows platforms.

pull/12983/head
Romain Geissler 2 years ago
parent 722d6f5897
commit dc23ff50f6
No known key found for this signature in database
GPG Key ID: 2530E79BC9A4BB13
  1. 2
      src/google/protobuf/arena.cc
  2. 2
      src/google/protobuf/reflection_mode.cc
  3. 10
      src/google/protobuf/reflection_mode.h
  4. 6
      src/google/protobuf/thread_safe_arena.h

@ -519,7 +519,7 @@ ThreadSafeArena::ThreadCache& ThreadSafeArena::thread_cache() {
new internal::ThreadLocalStorage<ThreadCache>();
return *thread_cache_->Get();
}
#elif defined(PROTOBUF_USE_DLLS)
#elif defined(PROTOBUF_USE_DLLS) && defined(_MSC_VER)
ThreadSafeArena::ThreadCache& ThreadSafeArena::thread_cache() {
static PROTOBUF_THREAD_LOCAL ThreadCache thread_cache;
return thread_cache;

@ -39,7 +39,7 @@ namespace internal {
#if !defined(PROTOBUF_NO_THREADLOCAL)
#if defined(PROTOBUF_USE_DLLS)
#if defined(PROTOBUF_USE_DLLS) && defined(_MSC_VER)
ReflectionMode& ScopedReflectionMode::reflection_mode() {
static PROTOBUF_THREAD_LOCAL ReflectionMode reflection_mode =
ReflectionMode::kDefault;

@ -95,18 +95,20 @@ class PROTOBUF_EXPORT ScopedReflectionMode final {
private:
#if !defined(PROTOBUF_NO_THREADLOCAL)
const ReflectionMode previous_mode_;
#if defined(PROTOBUF_USE_DLLS)
#if defined(PROTOBUF_USE_DLLS) && defined(_MSC_VER)
// Thread local variables cannot be exposed through MSVC DLL interface but we
// can wrap them in static functions.
static ReflectionMode& reflection_mode();
#else
PROTOBUF_CONSTINIT static PROTOBUF_THREAD_LOCAL ReflectionMode
reflection_mode_;
#endif // PROTOBUF_USE_DLLS
#endif // PROTOBUF_USE_DLLS && _MSC_VER
#endif // !PROTOBUF_NO_THREADLOCAL
};
#if !defined(PROTOBUF_NO_THREADLOCAL)
#if defined(PROTOBUF_USE_DLLS)
#if defined(PROTOBUF_USE_DLLS) && defined(_MSC_VER)
inline ScopedReflectionMode::ScopedReflectionMode(ReflectionMode mode)
: previous_mode_(reflection_mode()) {
@ -140,7 +142,7 @@ inline ReflectionMode ScopedReflectionMode::current_reflection_mode() {
return reflection_mode_;
}
#endif // PROTOBUF_USE_DLLS
#endif // PROTOBUF_USE_DLLS && _MSC_VER
#else

@ -261,9 +261,9 @@ class PROTOBUF_EXPORT ThreadSafeArena {
// iOS does not support __thread keyword so we use a custom thread local
// storage class we implemented.
static ThreadCache& thread_cache();
#elif defined(PROTOBUF_USE_DLLS)
// Thread local variables cannot be exposed through DLL interface but we can
// wrap them in static functions.
#elif defined(PROTOBUF_USE_DLLS) && defined(_MSC_VER)
// Thread local variables cannot be exposed through MSVC DLL interface but we
// can wrap them in static functions.
static ThreadCache& thread_cache();
#else
PROTOBUF_CONSTINIT static PROTOBUF_THREAD_LOCAL ThreadCache thread_cache_;

Loading…
Cancel
Save