Skip to content
Snippets Groups Projects
Commit 9b2df75c authored by David Parks's avatar David Parks
Browse files

SL-17077 Ensure profiling is disabled if gpu_benchmark fails. Log the source...

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 96178e68
No related branches found
No related tags found
No related merge requests found
...@@ -97,6 +97,11 @@ static const U32 STATUS_MSC_EXCEPTION = 0xE06D7363; // compiler specific ...@@ -97,6 +97,11 @@ static const U32 STATUS_MSC_EXCEPTION = 0xE06D7363; // compiler specific
U32 msc_exception_filter(U32 code, struct _EXCEPTION_POINTERS *exception_infop) 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) if (code == STATUS_MSC_EXCEPTION)
{ {
// C++ exception, go on // C++ exception, go on
......
...@@ -381,7 +381,10 @@ F32 gpu_benchmark(); ...@@ -381,7 +381,10 @@ F32 gpu_benchmark();
F32 logExceptionBenchmark() 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; F32 gbps = -1;
__try __try
{ {
...@@ -389,6 +392,9 @@ F32 logExceptionBenchmark() ...@@ -389,6 +392,9 @@ F32 logExceptionBenchmark()
} }
__except (msc_exception_filter(GetExceptionCode(), GetExceptionInformation())) __except (msc_exception_filter(GetExceptionCode(), GetExceptionInformation()))
{ {
// HACK - ensure that profiling is disabled
LLGLSLShader::finishProfile(false);
// convert to C++ styled exception // convert to C++ styled exception
char integer_string[32]; char integer_string[32];
sprintf(integer_string, "SEH, code: %lu\n", GetExceptionCode()); sprintf(integer_string, "SEH, code: %lu\n", GetExceptionCode());
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment