From 330e7c78a60babdc3b3aa505b450a324d6239b57 Mon Sep 17 00:00:00 2001 From: Martin Pitt Date: Wed, 4 Nov 2026 16:19:02 +0000 Subject: [PATCH] Drop a GLTF material override from a region the viewer no longer has A GenericStreamingMessage carrying a material override can arrive on a circuit whose region LLWorld has already removed (a neighbour dropped as the agent moves), or from a host that matches no region. The function already skipped the work when the lookup failed, but asserted first, which in a build with asserts on shows a message box and kills the viewer. Log the drop instead; the region's cache is gone with it, so there is nothing to queue the override for. Co-Authored-By: Claude Opus 5.5 --- indra/newview/llgltfmateriallist.cpp | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/indra/newview/llgltfmateriallist.cpp b/indra/newview/llgltfmateriallist.cpp index bea061bf28..011d34fabd 100644 --- a/indra/newview/llgltfmateriallist.cpp +++ b/indra/newview/llgltfmateriallist.cpp @@ -181,8 +181,6 @@ void LLGLTFMaterialList::applyOverrideMessage(LLMessageSystem* msg, const std::s const LLHost& host = msg->getSender(); LLViewerRegion* region = LLWorld::instance().getRegion(host); - llassert(region); - if (region) { U32 local_id = data.get("id").asInteger(); @@ -256,7 +254,11 @@ void LLGLTFMaterialList::applyOverrideMessage(LLMessageSystem* msg, const std::s LL_DEBUGS("GLTF") << "GLTF Material Override: " << cache.mObjectId << " " << cache.mLocalId << " " << cache.mRegionHandle << " (sides:" << (cache.mSides.size()) << ")" << LL_ENDL; region->cacheFullUpdateGLTFOverride(std::move(cache)); } - + } + else + { + // a region's circuit can still deliver an override after the region was removed + LL_WARNS("GLTF") << "Dropping GLTF material override from unknown region " << host << LL_ENDL; } }