summaryrefslogtreecommitdiff
path: root/indra/llimage
diff options
context:
space:
mode:
authorNat Goodspeed <nat@lindenlab.com>2023-05-08 12:07:31 -0400
committerNat Goodspeed <nat@lindenlab.com>2023-05-08 12:07:31 -0400
commit026ef1935dbdb21ab79159d38fb78e126dd6ac95 (patch)
tree1c5ff4626cc50a0a57cc27df534f0ad5d196bc83 /indra/llimage
parent6d0d9b8e549c2bc600e6bf416d4614edc55e35c0 (diff)
SL-19690: Follow up on Rye Mutt's fix for shutdown crashes.
Rather than continuing to propagate try/catch (Closed) (aka LLThreadSafeQueueInterrupt) constructs through the code base, make WorkQueueBase::post() return bool indicating success (i.e. ! isClosed()). This obviates postIfOpen(), which no one was using anyway. In effect, postIfOpen() is renamed post(), bypassing the exception when isClosed(). Review existing try/catch blocks of that sort, changing to test for post() returning false.
Diffstat (limited to 'indra/llimage')
-rw-r--r--indra/llimage/llimageworker.cpp28
1 files changed, 13 insertions, 15 deletions
diff --git a/indra/llimage/llimageworker.cpp b/indra/llimage/llimageworker.cpp
index 9358a0ae2c..520c81a8ec 100644
--- a/indra/llimage/llimageworker.cpp
+++ b/indra/llimage/llimageworker.cpp
@@ -92,21 +92,19 @@ LLImageDecodeThread::handle_t LLImageDecodeThread::decodeImage(
{
LL_PROFILE_ZONE_SCOPED_CATEGORY_TEXTURE;
- try
- {
- // Instantiate the ImageRequest right in the lambda, why not?
- mThreadPool->getQueue().post(
- [req = ImageRequest(image, discard, needs_aux, responder)]
- () mutable
- {
- auto done = req.processRequest();
- req.finishRequest(done);
- });
- }
- catch (const LLThreadSafeQueueInterrupt&)
- {
- LL_DEBUGS() << "Tried to start decoding on shutdown" << LL_ENDL;
- }
+ // Instantiate the ImageRequest right in the lambda, why not?
+ bool posted = mThreadPool->getQueue().post(
+ [req = ImageRequest(image, discard, needs_aux, responder)]
+ () mutable
+ {
+ auto done = req.processRequest();
+ req.finishRequest(done);
+ });
+ if (! posted)
+ {
+ LL_DEBUGS() << "Tried to start decoding on shutdown" << LL_ENDL;
+ // should this return 0?
+ }
// It's important to our consumer (LLTextureFetchWorker) that we return a
// nonzero handle. It is NOT important that the nonzero handle be unique: