diff options
| author | Graham Madarasz (Graham Linden) <graham@lindenlab.com> | 2013-03-29 13:22:29 -0700 | 
|---|---|---|
| committer | Graham Madarasz (Graham Linden) <graham@lindenlab.com> | 2013-03-29 13:22:29 -0700 | 
| commit | 2d713a2815d1c8dc86e62eb29fbd9aacbcefa186 (patch) | |
| tree | 156c94e27d802eeb762b35166ad3bca6198348d8 /indra/llcommon | |
| parent | 14f02e48b877569539c96ef5f261ac8b3943579f (diff) | |
Google Breakpad Fix. Code reviewed by DaveP
Diffstat (limited to 'indra/llcommon')
| -rw-r--r-- | indra/llcommon/llapp.cpp | 37 | 
1 files changed, 37 insertions, 0 deletions
| diff --git a/indra/llcommon/llapp.cpp b/indra/llcommon/llapp.cpp index 67e6705cbf..e6f2325653 100644 --- a/indra/llcommon/llapp.cpp +++ b/indra/llcommon/llapp.cpp @@ -910,6 +910,43 @@ bool unix_minidump_callback(const google_breakpad::MinidumpDescriptor& minidump_  #endif +#if LL_LINUX +bool unix_minidump_callback(const google_breakpad::MinidumpDescriptor& minidump_desc, void* context, bool succeeded) +{ +	// Copy minidump file path into fixed buffer in the app instance to avoid +	// heap allocations in a crash handler. +	 +	// path format: <dump_dir>/<minidump_id>.dmp +	int dirPathLength = strlen(minidump_desc.path()); +	 +	// The path must not be truncated. +	llassert((dirPathLength + 5) <= LLApp::MAX_MINDUMP_PATH_LENGTH); +	 +	char * path = LLApp::instance()->getMiniDumpFilename(); +	S32 remaining = LLApp::MAX_MINDUMP_PATH_LENGTH; +	strncpy(path, minidump_desc.path(), remaining); +	remaining -= dirPathLength; +	path += dirPathLength; +	if (remaining > 0 && dirPathLength > 0 && path[-1] != '/') +	{ +		*path++ = '/'; +		--remaining; +	} +	 +	llinfos << "generated minidump: " << LLApp::instance()->getMiniDumpFilename() << llendl; +	LLApp::runErrorHandler(); +	 +#ifndef LL_RELEASE_FOR_DOWNLOAD +	clear_signals(); +	return false; +#else +	return true; +#endif + +} +#endif + +  bool unix_post_minidump_callback(const char *dump_dir,  					  const char *minidump_id,  					  void *context, bool succeeded) | 
