summaryrefslogtreecommitdiff
path: root/indra/llcommon
diff options
context:
space:
mode:
authorNat Goodspeed <nat@lindenlab.com>2015-06-26 15:28:57 -0400
committerNat Goodspeed <nat@lindenlab.com>2015-06-26 15:28:57 -0400
commit8fee1565eb310081a7f3e26237ddd776c5a9aaaa (patch)
tree82080f6f5f65ff0b0ca80d3a0e595ee97203f6cd /indra/llcommon
parent3f52cefcc4b4cc00caef56a40e0da1ea981a3073 (diff)
MAINT-5232: Use LLError::Log::demangle() to log LLSingleton classes.
Diffstat (limited to 'indra/llcommon')
-rwxr-xr-xindra/llcommon/llsingleton.cpp28
-rwxr-xr-xindra/llcommon/llsingleton.h10
2 files changed, 24 insertions, 14 deletions
diff --git a/indra/llcommon/llsingleton.cpp b/indra/llcommon/llsingleton.cpp
index 2813814ae1..b78110296f 100755
--- a/indra/llcommon/llsingleton.cpp
+++ b/indra/llcommon/llsingleton.cpp
@@ -111,13 +111,13 @@ void LLSingletonBase::pop_initializing()
if (list.empty())
{
logerrs("Underflow in stack of currently-initializing LLSingletons at ",
- typeid(*this).name(), "::getInstance()");
+ demangle(typeid(*this).name()).c_str(), "::getInstance()");
}
if (list.back() != this)
{
logerrs("Push/pop mismatch in stack of currently-initializing LLSingletons: ",
- typeid(*this).name(), "::getInstance() trying to pop ",
- typeid(*list.back()).name());
+ demangle(typeid(*this).name()).c_str(), "::getInstance() trying to pop ",
+ demangle(typeid(*list.back()).name()).c_str());
}
// Here we're sure that list.back() == this. Whew, pop it.
list.pop_back();
@@ -148,7 +148,7 @@ void LLSingletonBase::capture_dependency(EInitState initState)
{
// 'found' is an iterator; *found is an LLSingletonBase*; **found
// is the actual LLSingletonBase instance.
- out << typeid(**found).name() << " -> ";
+ out << demangle(typeid(**found).name()) << " -> ";
}
// We promise to capture dependencies from both the constructor
// and the initSingleton() method, so an LLSingleton's instance
@@ -161,7 +161,8 @@ void LLSingletonBase::capture_dependency(EInitState initState)
// Decide which log helper to call based on initState. They have
// identical signatures.
((initState == CONSTRUCTING)? logerrs : logwarns)
- ("LLSingleton circularity: ", out.str().c_str(), typeid(*this).name(), "");
+ ("LLSingleton circularity: ", out.str().c_str(),
+ demangle(typeid(*this).name()).c_str(), "");
}
else
{
@@ -232,12 +233,12 @@ void LLSingletonBase::cleanupAll()
}
catch (const std::exception& e)
{
- logwarns("Exception in ", typeid(*sp).name(),
+ logwarns("Exception in ", demangle(typeid(*sp).name()).c_str(),
"::cleanupSingleton(): ", e.what());
}
catch (...)
{
- logwarns("Unknown exception in ", typeid(*sp).name(),
+ logwarns("Unknown exception in ", demangle(typeid(*sp).name()).c_str(),
"::cleanupSingleton()");
}
}
@@ -252,14 +253,14 @@ void LLSingletonBase::deleteAll()
{
// Capture the class name first: in case of exception, don't count on
// being able to extract it later.
- const char* name = typeid(*sp).name();
+ const std::string name = demangle(typeid(*sp).name());
try
{
// Call static method through instance function pointer.
if (! sp->mDeleteSingleton)
{
// This Should Not Happen... but carry on.
- logwarns(name, "::mDeleteSingleton not initialized!");
+ logwarns(name.c_str(), "::mDeleteSingleton not initialized!");
}
else
{
@@ -270,11 +271,11 @@ void LLSingletonBase::deleteAll()
}
catch (const std::exception& e)
{
- logwarns("Exception in ", name, "::deleteSingleton(): ", e.what());
+ logwarns("Exception in ", name.c_str(), "::deleteSingleton(): ", e.what());
}
catch (...)
{
- logwarns("Unknown exception in ", name, "::deleteSingleton()");
+ logwarns("Unknown exception in ", name.c_str(), "::deleteSingleton()");
}
}
}
@@ -348,3 +349,8 @@ void LLSingletonBase::logwarns(const char* p1, const char* p2, const char* p3, c
std::cerr << p1 << p2 << p3 << p4 << std::endl;
}
}
+
+std::string LLSingletonBase::demangle(const char* mangled)
+{
+ return LLError::Log::demangle(mangled);
+}
diff --git a/indra/llcommon/llsingleton.h b/indra/llcommon/llsingleton.h
index a82101c367..253e0b9a6b 100755
--- a/indra/llcommon/llsingleton.h
+++ b/indra/llcommon/llsingleton.h
@@ -104,6 +104,7 @@ protected:
// delegate LL_WARNS() logging to llsingleton.cpp
static void logwarns(const char* p1, const char* p2="",
const char* p3="", const char* p4="");
+ static std::string demangle(const char* mangled);
// obtain canonical ref_ptr_t
static ref_ptr_t get_master_refcount();
@@ -337,11 +338,13 @@ public:
{
case UNINITIALIZED:
// should never be uninitialized at this point
- logerrs("Uninitialized singleton ", typeid(DERIVED_TYPE).name());
+ logerrs("Uninitialized singleton ",
+ demangle(typeid(DERIVED_TYPE).name()).c_str());
return NULL;
case CONSTRUCTING:
- logerrs("Tried to access singleton ", typeid(DERIVED_TYPE).name(),
+ logerrs("Tried to access singleton ",
+ demangle(typeid(DERIVED_TYPE).name()).c_str(),
" from singleton constructor!");
return NULL;
@@ -361,7 +364,8 @@ public:
break;
case DELETED:
- logwarns("Trying to access deleted singleton ", typeid(DERIVED_TYPE).name(),
+ logwarns("Trying to access deleted singleton ",
+ demangle(typeid(DERIVED_TYPE).name()).c_str(),
" -- creating new instance");
SingletonLifetimeManager::construct();
// same as first time construction