diff options
author | Nat Goodspeed <nat@lindenlab.com> | 2021-11-23 20:48:44 -0500 |
---|---|---|
committer | Nat Goodspeed <nat@lindenlab.com> | 2021-11-23 20:48:44 -0500 |
commit | 67ace0df9953ce3264048c3946720a9df492edfa (patch) | |
tree | ddc205f7b79109c306a328e912c270968f675439 /indra/llwindow | |
parent | 2b96f89c2a374d72c0a8bc28a7b06ad4db7eae6e (diff) |
SL-16400: Address a couple shutdown crashes.
It can happen that we try to post() work for LLWindowWin32's window thread
after the thread's WorkQueue has been closed.
Also, instead of giving the "General" ThreadPool static lifespan, put it on
the heap, anchored with a static unique_ptr.
Diffstat (limited to 'indra/llwindow')
-rw-r--r-- | indra/llwindow/llwindowwin32.cpp | 10 |
1 files changed, 9 insertions, 1 deletions
diff --git a/indra/llwindow/llwindowwin32.cpp b/indra/llwindow/llwindowwin32.cpp index af7b8d91f0..7f8f88a749 100644 --- a/indra/llwindow/llwindowwin32.cpp +++ b/indra/llwindow/llwindowwin32.cpp @@ -351,7 +351,15 @@ struct LLWindowWin32::LLWindowWin32Thread : public LL::ThreadPool template <typename CALLABLE> void post(CALLABLE&& func) { - getQueue().post(std::forward<CALLABLE>(func)); + try + { + getQueue().post(std::forward<CALLABLE>(func)); + } + catch (const LLThreadSafeQueueInterrupt&) + { + // Shutdown timing is tricky. The main thread can end up trying + // to post a cursor position after having closed the WorkQueue. + } } /** |