diff options
| author | Brad Payne (Vir Linden) <vir@lindenlab.com> | 2020-05-06 21:00:50 +0100 |
|---|---|---|
| committer | Brad Payne (Vir Linden) <vir@lindenlab.com> | 2020-05-06 21:00:50 +0100 |
| commit | fbd5f63f470e3cea5039b929690c9e28a137c244 (patch) | |
| tree | af6cf39af2aae68460c8d0061ff5e04c2cc50846 /indra/llwindow/llwindowwin32.cpp | |
| parent | c65151b2b34e3dbc95e64bd9f4a358cad2609be4 (diff) | |
| parent | 4a7fd0117a43dca9e30c58c6417ebdf6862561f6 (diff) | |
merge
Diffstat (limited to 'indra/llwindow/llwindowwin32.cpp')
| -rw-r--r-- | indra/llwindow/llwindowwin32.cpp | 14 |
1 files changed, 12 insertions, 2 deletions
diff --git a/indra/llwindow/llwindowwin32.cpp b/indra/llwindow/llwindowwin32.cpp index 3c69aa98c4..0b3936f8a5 100644 --- a/indra/llwindow/llwindowwin32.cpp +++ b/indra/llwindow/llwindowwin32.cpp @@ -741,17 +741,27 @@ void LLWindowWin32::restore() SetFocus(mWindowHandle); } +// See SL-12170 +// According to callstack "c0000005 Access violation" happened inside __try block, +// deep in DestroyWindow and crashed viewer, which shouldn't be possible. +// I tried manually causing this exception and it was caught without issues, so +// I'm turning off optimizations for this part to be sure code executes as intended +// (it is a straw, but I have no idea why else __try can get overruled) +#pragma optimize("", off) bool destroy_window_handler(HWND &hWnd) { + bool res; __try { - return DestroyWindow(hWnd); + res = DestroyWindow(hWnd); } __except (EXCEPTION_EXECUTE_HANDLER) { - return false; + res = false; } + return res; } +#pragma optimize("", on) // close() destroys all OS-specific code associated with a window. // Usually called from LLWindowManager::destroyWindow() |
