forked from OSchip/llvm-project
Always use is_initialized and set_initialized in cxa_guard.cpp
This patch is part of a series of cleanups to cxa_guard.cpp. It should have no functionality change. llvm-svn: 357668
This commit is contained in:
parent
8b8a02175a
commit
690c70de76
|
@ -37,17 +37,6 @@ typedef uint32_t guard_type;
|
||||||
inline void set_initialized(guard_type* guard_object) {
|
inline void set_initialized(guard_type* guard_object) {
|
||||||
*guard_object |= 1;
|
*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.
|
// Test the lowest bit.
|
||||||
inline bool is_initialized(guard_type* guard_object) {
|
inline bool is_initialized(guard_type* guard_object) {
|
||||||
|
@ -55,13 +44,17 @@ inline bool is_initialized(guard_type* guard_object) {
|
||||||
}
|
}
|
||||||
|
|
||||||
#else
|
#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) {
|
bool is_initialized(guard_type* guard_object) {
|
||||||
char* initialized = (char*)guard_object;
|
char* initialized = (char*)guard_object;
|
||||||
return *initialized;
|
return *initialized;
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef _LIBCXXABI_HAS_NO_THREADS
|
#ifndef _LIBCXXABI_HAS_NO_THREADS
|
||||||
|
@ -169,10 +162,9 @@ extern "C"
|
||||||
|
|
||||||
#ifndef _LIBCXXABI_HAS_NO_THREADS
|
#ifndef _LIBCXXABI_HAS_NO_THREADS
|
||||||
_LIBCXXABI_FUNC_VIS int __cxa_guard_acquire(guard_type *guard_object) {
|
_LIBCXXABI_FUNC_VIS int __cxa_guard_acquire(guard_type *guard_object) {
|
||||||
char* initialized = (char*)guard_object;
|
|
||||||
if (std::__libcpp_mutex_lock(&guard_mut))
|
if (std::__libcpp_mutex_lock(&guard_mut))
|
||||||
abort_message("__cxa_guard_acquire failed to acquire mutex");
|
abort_message("__cxa_guard_acquire failed to acquire mutex");
|
||||||
int result = *initialized == 0;
|
int result = !is_initialized(guard_object);
|
||||||
if (result)
|
if (result)
|
||||||
{
|
{
|
||||||
#if defined(__APPLE__) && !defined(__arm__)
|
#if defined(__APPLE__) && !defined(__arm__)
|
||||||
|
@ -211,7 +203,7 @@ _LIBCXXABI_FUNC_VIS int __cxa_guard_acquire(guard_type *guard_object) {
|
||||||
while (get_lock(*guard_object))
|
while (get_lock(*guard_object))
|
||||||
if (std::__libcpp_condvar_wait(&guard_cv, &guard_mut))
|
if (std::__libcpp_condvar_wait(&guard_cv, &guard_mut))
|
||||||
abort_message("__cxa_guard_acquire condition variable wait failed");
|
abort_message("__cxa_guard_acquire condition variable wait failed");
|
||||||
result = *initialized == 0;
|
result = !is_initialized(guard_object);
|
||||||
if (result)
|
if (result)
|
||||||
set_lock(*guard_object, true);
|
set_lock(*guard_object, true);
|
||||||
#endif // !__APPLE__ || __arm__
|
#endif // !__APPLE__ || __arm__
|
||||||
|
|
Loading…
Reference in New Issue