diff options
Diffstat (limited to 'indra/llcommon')
| -rw-r--r-- | indra/llcommon/llmortician.cpp | 36 | ||||
| -rw-r--r-- | indra/llcommon/llmortician.h | 2 | 
2 files changed, 38 insertions, 0 deletions
| diff --git a/indra/llcommon/llmortician.cpp b/indra/llcommon/llmortician.cpp index 287f096eae..93c7d520f2 100644 --- a/indra/llcommon/llmortician.cpp +++ b/indra/llcommon/llmortician.cpp @@ -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())  diff --git a/indra/llcommon/llmortician.h b/indra/llcommon/llmortician.h index 9517e2db5e..41cb49fab1 100644 --- a/indra/llcommon/llmortician.h +++ b/indra/llcommon/llmortician.h @@ -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(); | 
