MAINT-4009: Cleaning up the error callstacks memory before app quit.

master
Stinson Linden 2014-04-28 19:18:47 +01:00
parent b31bfdba37
commit 37d620463b
3 changed files with 42 additions and 20 deletions

View File

@ -1357,15 +1357,9 @@ namespace LLError
#endif
//static
void LLCallStacks::push(const char* function, const int line)
void LLCallStacks::allocateStackBuffer()
{
CallStacksLogLock lock;
if (!lock.ok())
{
return;
}
if(!sBuffer)
if(sBuffer == NULL)
{
sBuffer = new char*[512] ;
sBuffer[0] = new char[512 * 128] ;
@ -1375,6 +1369,31 @@ namespace LLError
}
sIndex = 0 ;
}
}
void LLCallStacks::freeStackBuffer()
{
if(sBuffer != NULL)
{
delete [] sBuffer[0] ;
delete [] sBuffer ;
sBuffer = NULL ;
}
}
//static
void LLCallStacks::push(const char* function, const int line)
{
CallStacksLogLock lock;
if (!lock.ok())
{
return;
}
if(sBuffer == NULL)
{
allocateStackBuffer();
}
if(sIndex > 511)
{
@ -1406,15 +1425,9 @@ namespace LLError
return;
}
if(!sBuffer)
if(sBuffer == NULL)
{
sBuffer = new char*[512] ;
sBuffer[0] = new char[512 * 128] ;
for(S32 i = 1 ; i < 512 ; i++)
{
sBuffer[i] = sBuffer[i-1] + 128 ;
}
sIndex = 0 ;
allocateStackBuffer();
}
if(sIndex > 511)
@ -1445,11 +1458,9 @@ namespace LLError
LL_INFOS() << " *************** END OF LL CALL STACKS *************** " << LL_ENDL;
}
if(sBuffer)
if(sBuffer != NULL)
{
delete[] sBuffer[0] ;
delete[] sBuffer ;
sBuffer = NULL ;
freeStackBuffer();
}
}
@ -1459,5 +1470,10 @@ namespace LLError
sIndex = 0 ;
}
//static
void LLCallStacks::cleanup()
{
freeStackBuffer();
}
}

View File

@ -261,6 +261,9 @@ namespace LLError
private:
static char** sBuffer ;
static S32 sIndex ;
static void allocateStackBuffer();
static void freeStackBuffer();
public:
static void push(const char* function, const int line) ;
@ -268,6 +271,7 @@ namespace LLError
static void print() ;
static void clear() ;
static void end(std::ostringstream* _out) ;
static void cleanup();
};
}

View File

@ -2117,6 +2117,8 @@ bool LLAppViewer::cleanup()
ll_close_fail_log();
LLError::LLCallStacks::cleanup();
removeMarkerFiles();
LL_INFOS() << "Goodbye!" << LL_ENDL;