diff options
author | Eric Fiselier <eric@efcs.ca> | 2021-06-09 20:59:05 +0000 |
---|---|---|
committer | Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com> | 2021-06-09 20:59:05 +0000 |
commit | 24184f1a5165384c59938cbd6d59c398770ad14e (patch) | |
tree | 74b6f07eca972dfe1572f4c8d75552d7565cce41 | |
parent | 14f9d046f1684ce5d2654d6226ac7b6bf70567b3 (diff) | |
parent | ab2d379bc0e894731fa7d8a044e2292aa8226f75 (diff) | |
download | libcxxabi-24184f1a5165384c59938cbd6d59c398770ad14e.tar.gz |
Always use is_initialized and set_initialized in cxa_guard.cpp am: 882e889fa0 am: 80a101127b am: ab2d379bc0
Original change: https://android-review.googlesource.com/c/platform/external/libcxxabi/+/1727430
Change-Id: I6001255d9607c10d5c80982097ca201620f7cda1
-rw-r--r-- | src/cxa_guard.cpp | 24 |
1 files changed, 8 insertions, 16 deletions
diff --git a/src/cxa_guard.cpp b/src/cxa_guard.cpp index f4c2a18..20b4adc 100644 --- a/src/cxa_guard.cpp +++ b/src/cxa_guard.cpp @@ -38,17 +38,6 @@ typedef uint32_t guard_type; inline void set_initialized(guard_type* guard_object) { *guard_object |= 1; } -#else -typedef uint64_t guard_type; - -void set_initialized(guard_type* guard_object) { - char* initialized = (char*)guard_object; - *initialized = 1; -} -#endif - -#if defined(_LIBCXXABI_HAS_NO_THREADS) || (defined(__APPLE__) && !defined(__arm__)) -#ifdef __arm__ // Test the lowest bit. inline bool is_initialized(guard_type* guard_object) { @@ -56,13 +45,17 @@ inline bool is_initialized(guard_type* guard_object) { } #else +typedef uint64_t guard_type; + +void set_initialized(guard_type* guard_object) { + char* initialized = (char*)guard_object; + *initialized = 1; +} bool is_initialized(guard_type* guard_object) { char* initialized = (char*)guard_object; return *initialized; } - -#endif #endif #ifndef _LIBCXXABI_HAS_NO_THREADS @@ -170,10 +163,9 @@ extern "C" #ifndef _LIBCXXABI_HAS_NO_THREADS _LIBCXXABI_FUNC_VIS int __cxa_guard_acquire(guard_type *guard_object) { - char* initialized = (char*)guard_object; if (std::__libcpp_mutex_lock(&guard_mut)) abort_message("__cxa_guard_acquire failed to acquire mutex"); - int result = *initialized == 0; + int result = !is_initialized(guard_object); if (result) { #if defined(__APPLE__) && !defined(__arm__) @@ -212,7 +204,7 @@ _LIBCXXABI_FUNC_VIS int __cxa_guard_acquire(guard_type *guard_object) { while (get_lock(*guard_object)) if (std::__libcpp_condvar_wait(&guard_cv, &guard_mut)) abort_message("__cxa_guard_acquire condition variable wait failed"); - result = *initialized == 0; + result = !is_initialized(guard_object); if (result) set_lock(*guard_object, true); #endif // !__APPLE__ || __arm__ |