diff options
author | Nat Goodspeed <nat@lindenlab.com> | 2020-07-07 14:48:36 -0400 |
---|---|---|
committer | Nat Goodspeed <nat@lindenlab.com> | 2020-07-07 14:48:36 -0400 |
commit | 87da08b1f49a600b0e1993b31e46b1808aa8fecf (patch) | |
tree | 0cc00fbb92f12d1043021f9fc66ea0a76b98a7cd /indra/llcommon/lltrace.h | |
parent | 5ab0ff486b98fb44c7472f84c35f353d1762b3d1 (diff) |
DRTVWR-476, SL-13555: Don't crash if user closes viewer during login.
Ever since February 2010, the body of the login coroutine function has been
enclosed in try/catch (...), with an llerrs message to try to crash more
informatively than the runtime's unhandled-exception termination. Over the
years this evolved to LL_ERRS and then to CRASH_ON_UNHANDLED_EXCEPTION.
This persisted despite the August 2016 addition of generic catch clauses in
the LLCoros::toplevel() function to serve the same purpose, and despite the
subsequent introduction of the LLCoros::Stop family of exceptions to
deliberately throw into waiting coroutines on viewer shutdown.
That's exactly what was happening. When the user closed the viewer while
waiting for the response from login.cgi, the waiting operation threw
LLCoros::Stopping, which was caught by that CRASH_ON_UNHANDLED_EXCEPTION,
which crashed the viewer with LL_ERRS rather than propagating up to the
toplevel() and cleanly terminating the coroutine.
Change CRASH_ON_UNHANDLED_EXCEPTION() to LOG_UNHANDLED_EXCEPTION() and
re-throw so toplevel() can handle.
Diffstat (limited to 'indra/llcommon/lltrace.h')
0 files changed, 0 insertions, 0 deletions