diff options
| author | Jonathan "Geenz" Goodman <geenz@lindenlab.com> | 2026-08-14 17:09:47 -0400 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2026-08-14 17:09:47 -0400 |
| commit | 0007f7f99fc37b45ad7f3ad6df4238893c50a5be (patch) | |
| tree | e73b7b75809ab21a1933b7cb9f78f4fc5271b061 /indra/newview/lltexturefetch.cpp | |
| parent | e3a92a3f8e7d6df3772adcecb037149e6fcf0f3e (diff) | |
| parent | a3c380acd9256102730574afb261aa6266f9a2a5 (diff) | |
Merge branch 'develop' into geenz/linux-to-develop
Diffstat (limited to 'indra/newview/lltexturefetch.cpp')
| -rw-r--r-- | indra/newview/lltexturefetch.cpp | 18 |
1 files changed, 14 insertions, 4 deletions
diff --git a/indra/newview/lltexturefetch.cpp b/indra/newview/lltexturefetch.cpp index 144940c705..a0d7aac3f3 100644 --- a/indra/newview/lltexturefetch.cpp +++ b/indra/newview/lltexturefetch.cpp @@ -2527,18 +2527,26 @@ S32 LLTextureFetch::createRequest(FTType f_type, const std::string& url, const L { LL_DEBUGS("Avatar") << " requesting " << id << " " << w << "x" << h << " discard " << desired_discard << " type " << f_type << LL_ENDL; } - LLTextureFetchWorker* worker = getWorker(id); + + // Potentially we might remove a request, lock queue here instead + // of getWorker to make sure request will persist till removeRequest + lockQueue(); + LLTextureFetchWorker* worker = getWorkerAfterLock(id); if (worker) { if (worker->mHost != host) { LL_WARNS(LOG_TXT) << "LLTextureFetch::createRequest " << id << " called with multiple hosts: " << host << " != " << worker->mHost << LL_ENDL; - removeRequest(worker, true); + size_t erased_1 = mRequestMap.erase(worker->mID); + llassert_always(erased_1 > 0); + unlockQueue(); + worker->scheduleDelete(); worker = NULL; return CREATE_REQUEST_ERROR_MHOSTS; } } + unlockQueue(); S32 desired_size; std::string exten = gDirUtilp->getExtension(url); @@ -2717,9 +2725,11 @@ void LLTextureFetch::deleteAllRequests() } LLTextureFetchWorker* worker = mRequestMap.begin()->second; - unlockQueue() ; + size_t erased_1 = mRequestMap.erase(worker->mID); + llassert_always(erased_1 > 0); + unlockQueue(); - removeRequest(worker, true); + worker->scheduleDelete(); } } |
