SL-17077 Ensure profiling is disabled if gpu_benchmark fails. Log the source of the real crash for when the viewer inevitably crashes later.
parent
96178e689b
commit
9b2df75c87
|
|
@ -97,6 +97,11 @@ static const U32 STATUS_MSC_EXCEPTION = 0xE06D7363; // compiler specific
|
|||
|
||||
U32 msc_exception_filter(U32 code, struct _EXCEPTION_POINTERS *exception_infop)
|
||||
{
|
||||
const auto stack = to_string(boost::stacktrace::stacktrace());
|
||||
LL_WARNS() << "SEH Exception handled (that probably shouldn't be): Code " << code
|
||||
<< "\n Stack trace: \n"
|
||||
<< stack << LL_ENDL;
|
||||
|
||||
if (code == STATUS_MSC_EXCEPTION)
|
||||
{
|
||||
// C++ exception, go on
|
||||
|
|
|
|||
|
|
@ -381,7 +381,10 @@ F32 gpu_benchmark();
|
|||
|
||||
F32 logExceptionBenchmark()
|
||||
{
|
||||
// Todo: make a wrapper/class for SEH exceptions
|
||||
// FIXME: gpu_benchmark uses many C++ classes on the stack to control state.
|
||||
// SEH exceptions with our current exception handling options do not call
|
||||
// destructors for these classes, resulting in an undefined state should
|
||||
// this handler be invoked.
|
||||
F32 gbps = -1;
|
||||
__try
|
||||
{
|
||||
|
|
@ -389,6 +392,9 @@ F32 logExceptionBenchmark()
|
|||
}
|
||||
__except (msc_exception_filter(GetExceptionCode(), GetExceptionInformation()))
|
||||
{
|
||||
// HACK - ensure that profiling is disabled
|
||||
LLGLSLShader::finishProfile(false);
|
||||
|
||||
// convert to C++ styled exception
|
||||
char integer_string[32];
|
||||
sprintf(integer_string, "SEH, code: %lu\n", GetExceptionCode());
|
||||
|
|
|
|||
Loading…
Reference in New Issue