summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEric Fiselier <eric@efcs.ca>2021-06-09 20:59:05 +0000
committerAutomerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>2021-06-09 20:59:05 +0000
commit24184f1a5165384c59938cbd6d59c398770ad14e (patch)
tree74b6f07eca972dfe1572f4c8d75552d7565cce41
parent14f9d046f1684ce5d2654d6226ac7b6bf70567b3 (diff)
parentab2d379bc0e894731fa7d8a044e2292aa8226f75 (diff)
downloadlibcxxabi-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.cpp24
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__