SL-10908 Output class names we are clearing on startup

master
andreykproductengine 2019-05-27 17:32:53 +03:00
parent 8c32aa0dd1
commit 562fe5bf63
3 changed files with 46 additions and 0 deletions

View File

@ -37,6 +37,42 @@ LLMortician::~LLMortician()
sGraveyard.remove(this);
}
U32 LLMortician::logClass(std::stringstream &str)
{
U32 size = sGraveyard.size();
str << "Mortician graveyard count: " << size;
str << " Zealous: " << (sDestroyImmediate ? "True" : "False");
if (size == 0)
{
return size;
}
str << " Output:\n";
std::list<LLMortician*>::iterator iter = sGraveyard.begin();
std::list<LLMortician*>::iterator end = sGraveyard.end();
while (iter!=end)
{
LLMortician* dead = *iter;
iter++;
// Be as detailed and safe as possible to figure out issues
str << "Pointer: " << dead;
if (dead)
{
try
{
str << " Is dead: " << (dead->isDead() ? "True" : "False");
str << " Name: " << typeid(*dead).name();
}
catch (...)
{
}
}
str << "\n";
}
str << "--------------------------------------------";
return size;
}
void LLMortician::updateClass()
{
while (!sGraveyard.empty())

View File

@ -34,6 +34,8 @@ class LL_COMMON_API LLMortician
{
public:
LLMortician() { mIsDead = FALSE; }
static U32 graveyardCount() { return sGraveyard.size(); };
static U32 logClass(std::stringstream &str);
static void updateClass();
virtual ~LLMortician();
void die();

View File

@ -348,6 +348,14 @@ bool idle_startup()
// to work.
gIdleCallbacks.callFunctions();
gViewerWindow->updateUI();
// There is a crash on updateClass, this is an attempt to get more information
if (LLMortician::graveyardCount())
{
std::stringstream log_stream;
LLMortician::logClass(log_stream);
LL_INFOS() << log_stream.str() << LL_ENDL;
}
LLMortician::updateClass();
const std::string delims (" ");