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:
parent
862b01746e
commit
0e69160ebc
3 changed files with 39 additions and 17 deletions
|
|
@ -1 +0,0 @@
|
||||||
../libbacktrace/include/backtrace
|
|
||||||
|
|
@ -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: {
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue