Remove include/backtrace symlink.

This requires a few other changes to support building libutils
properly. It does appear the windows versions of libutils is
referencing CallStack code, but it doesn't seem to cause any problems.
However, I removed those references completely for the windows build.

Also removed a few extra spaces that seem to have accumulated in the
RefBase.cpp.

Bug: 170465278

Test: Builds and libutils unit tests pass.
Change-Id: Ibeee7791b13636b34bdd592c5420fd91620f752a
This commit is contained in:
Christopher Ferris 2020-10-14 14:13:58 -07:00
parent 862b01746e
commit 0e69160ebc
3 changed files with 39 additions and 17 deletions

View file

@ -1 +0,0 @@
../libbacktrace/include/backtrace

View file

@ -43,7 +43,13 @@ cc_library_headers {
header_libs: ["libbacktrace_headers"], header_libs: ["libbacktrace_headers"],
export_header_lib_headers: ["libbacktrace_headers"], export_header_lib_headers: ["libbacktrace_headers"],
}, },
linux_glibc: {
header_libs: ["libbacktrace_headers"],
export_header_lib_headers: ["libbacktrace_headers"],
},
linux_bionic: { linux_bionic: {
header_libs: ["libbacktrace_headers"],
export_header_lib_headers: ["libbacktrace_headers"],
enabled: true, enabled: true,
}, },
windows: { windows: {

View file

@ -21,9 +21,9 @@
#include <android-base/macros.h> #include <android-base/macros.h>
#include <utils/RefBase.h> #include <log/log.h>
#include <utils/CallStack.h> #include <utils/RefBase.h>
#include <utils/Mutex.h> #include <utils/Mutex.h>
@ -55,6 +55,17 @@
// case. // case.
#define DEBUG_REFBASE_DESTRUCTION 1 #define DEBUG_REFBASE_DESTRUCTION 1
#if !defined(_WIN32)
// CallStack is only supported on linux type platforms.
#define CALLSTACK_ENABLED 1
#else
#define CALLSTACK_ENABLED 0
#endif
#if CALLSTACK_ENABLED
#include <utils/CallStack.h>
#endif
// --------------------------------------------------------------------------- // ---------------------------------------------------------------------------
namespace android { namespace android {
@ -185,7 +196,7 @@ public:
, mRetain(false) , mRetain(false)
{ {
} }
~weakref_impl() ~weakref_impl()
{ {
bool dumpStack = false; bool dumpStack = false;
@ -196,7 +207,7 @@ public:
while (refs) { while (refs) {
char inc = refs->ref >= 0 ? '+' : '-'; char inc = refs->ref >= 0 ? '+' : '-';
ALOGD("\t%c ID %p (ref %d):", inc, refs->id, refs->ref); ALOGD("\t%c ID %p (ref %d):", inc, refs->id, refs->ref);
#if DEBUG_REFS_CALLSTACK_ENABLED #if DEBUG_REFS_CALLSTACK_ENABLED && CALLSTACK_ENABLED
CallStack::logStack(LOG_TAG, refs->stack.get()); CallStack::logStack(LOG_TAG, refs->stack.get());
#endif #endif
refs = refs->next; refs = refs->next;
@ -210,7 +221,7 @@ public:
while (refs) { while (refs) {
char inc = refs->ref >= 0 ? '+' : '-'; char inc = refs->ref >= 0 ? '+' : '-';
ALOGD("\t%c ID %p (ref %d):", inc, refs->id, refs->ref); ALOGD("\t%c ID %p (ref %d):", inc, refs->id, refs->ref);
#if DEBUG_REFS_CALLSTACK_ENABLED #if DEBUG_REFS_CALLSTACK_ENABLED && CALLSTACK_ENABLED
CallStack::logStack(LOG_TAG, refs->stack.get()); CallStack::logStack(LOG_TAG, refs->stack.get());
#endif #endif
refs = refs->next; refs = refs->next;
@ -218,7 +229,9 @@ public:
} }
if (dumpStack) { if (dumpStack) {
ALOGE("above errors at:"); ALOGE("above errors at:");
#if CALLSTACK_ENABLED
CallStack::logStack(LOG_TAG); CallStack::logStack(LOG_TAG);
#endif
} }
} }
@ -261,8 +274,7 @@ public:
renameRefsId(mWeakRefs, old_id, new_id); renameRefsId(mWeakRefs, old_id, new_id);
} }
void trackMe(bool track, bool retain) void trackMe(bool track, bool retain) {
{
mTrackEnabled = track; mTrackEnabled = track;
mRetain = retain; mRetain = retain;
} }
@ -306,7 +318,7 @@ private:
{ {
ref_entry* next; ref_entry* next;
const void* id; const void* id;
#if DEBUG_REFS_CALLSTACK_ENABLED #if DEBUG_REFS_CALLSTACK_ENABLED && CALLSTACK_ENABLED
CallStack::CallStackUPtr stack; CallStack::CallStackUPtr stack;
#endif #endif
int32_t ref; int32_t ref;
@ -323,7 +335,7 @@ private:
// decrement the reference count. // decrement the reference count.
ref->ref = mRef; ref->ref = mRef;
ref->id = id; ref->id = id;
#if DEBUG_REFS_CALLSTACK_ENABLED #if DEBUG_REFS_CALLSTACK_ENABLED && CALLSTACK_ENABLED
ref->stack = CallStack::getCurrent(2); ref->stack = CallStack::getCurrent(2);
#endif #endif
ref->next = *refs; ref->next = *refs;
@ -335,7 +347,7 @@ private:
{ {
if (mTrackEnabled) { if (mTrackEnabled) {
AutoMutex _l(mMutex); AutoMutex _l(mMutex);
ref_entry* const head = *refs; ref_entry* const head = *refs;
ref_entry* ref = head; ref_entry* ref = head;
while (ref != NULL) { while (ref != NULL) {
@ -359,7 +371,9 @@ private:
ref = ref->next; ref = ref->next;
} }
#if CALLSTACK_ENABLED
CallStack::logStack(LOG_TAG); CallStack::logStack(LOG_TAG);
#endif
} }
} }
@ -385,7 +399,7 @@ private:
snprintf(buf, sizeof(buf), "\t%c ID %p (ref %d):\n", snprintf(buf, sizeof(buf), "\t%c ID %p (ref %d):\n",
inc, refs->id, refs->ref); inc, refs->id, refs->ref);
out->append(buf); out->append(buf);
#if DEBUG_REFS_CALLSTACK_ENABLED #if DEBUG_REFS_CALLSTACK_ENABLED && CALLSTACK_ENABLED
out->append(CallStack::stackToString("\t\t", refs->stack.get())); out->append(CallStack::stackToString("\t\t", refs->stack.get()));
#else #else
out->append("\t\t(call stacks disabled)"); out->append("\t\t(call stacks disabled)");
@ -412,7 +426,7 @@ void RefBase::incStrong(const void* id) const
{ {
weakref_impl* const refs = mRefs; weakref_impl* const refs = mRefs;
refs->incWeak(id); refs->incWeak(id);
refs->addStrongRef(id); refs->addStrongRef(id);
const int32_t c = refs->mStrong.fetch_add(1, std::memory_order_relaxed); const int32_t c = refs->mStrong.fetch_add(1, std::memory_order_relaxed);
ALOG_ASSERT(c > 0, "incStrong() called on %p after last strong ref", refs); ALOG_ASSERT(c > 0, "incStrong() called on %p after last strong ref", refs);
@ -468,7 +482,7 @@ void RefBase::forceIncStrong(const void* id) const
// TODO: Better document assumptions. // TODO: Better document assumptions.
weakref_impl* const refs = mRefs; weakref_impl* const refs = mRefs;
refs->incWeak(id); refs->incWeak(id);
refs->addStrongRef(id); refs->addStrongRef(id);
const int32_t c = refs->mStrong.fetch_add(1, std::memory_order_relaxed); const int32_t c = refs->mStrong.fetch_add(1, std::memory_order_relaxed);
ALOG_ASSERT(c >= 0, "forceIncStrong called on %p after ref count underflow", ALOG_ASSERT(c >= 0, "forceIncStrong called on %p after ref count underflow",
@ -550,7 +564,7 @@ void RefBase::weakref_type::decWeak(const void* id)
bool RefBase::weakref_type::attemptIncStrong(const void* id) bool RefBase::weakref_type::attemptIncStrong(const void* id)
{ {
incWeak(id); incWeak(id);
weakref_impl* const impl = static_cast<weakref_impl*>(this); weakref_impl* const impl = static_cast<weakref_impl*>(this);
int32_t curCount = impl->mStrong.load(std::memory_order_relaxed); int32_t curCount = impl->mStrong.load(std::memory_order_relaxed);
@ -567,7 +581,7 @@ bool RefBase::weakref_type::attemptIncStrong(const void* id)
// the strong count has changed on us, we need to re-assert our // the strong count has changed on us, we need to re-assert our
// situation. curCount was updated by compare_exchange_weak. // situation. curCount was updated by compare_exchange_weak.
} }
if (curCount <= 0 || curCount == INITIAL_STRONG_VALUE) { if (curCount <= 0 || curCount == INITIAL_STRONG_VALUE) {
// we're now in the harder case of either: // we're now in the harder case of either:
// - there never was a strong reference on us // - there never was a strong reference on us
@ -624,7 +638,7 @@ bool RefBase::weakref_type::attemptIncStrong(const void* id)
} }
} }
} }
impl->addStrongRef(id); impl->addStrongRef(id);
#if PRINT_REFS #if PRINT_REFS
@ -719,7 +733,10 @@ RefBase::~RefBase()
// Treating this as fatal is prone to causing boot loops. For debugging, it's // Treating this as fatal is prone to causing boot loops. For debugging, it's
// better to treat as non-fatal. // better to treat as non-fatal.
ALOGD("RefBase: Explicit destruction, weak count = %d (in %p)", mRefs->mWeak.load(), this); ALOGD("RefBase: Explicit destruction, weak count = %d (in %p)", mRefs->mWeak.load(), this);
#if CALLSTACK_ENABLED
CallStack::logStack(LOG_TAG); CallStack::logStack(LOG_TAG);
#endif
#else #else
LOG_ALWAYS_FATAL("RefBase: Explicit destruction, weak count = %d", mRefs->mWeak.load()); LOG_ALWAYS_FATAL("RefBase: Explicit destruction, weak count = %d", mRefs->mWeak.load());
#endif #endif