From 30f0b8cad2d9164b0087550c42c2449f18eafa7c Mon Sep 17 00:00:00 2001 From: Andrey Lihatskiy Date: Fri, 6 Feb 2026 20:41:32 +0200 Subject: #5380 Fix race condition in texture creation causing AV Move addToCreateTexture() after image scaling to prevent mRawImage from being replaced while background thread holds pointer to it. --- indra/newview/llviewertexture.cpp | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) (limited to 'indra/newview/llviewertexture.cpp') diff --git a/indra/newview/llviewertexture.cpp b/indra/newview/llviewertexture.cpp index 23915d01fa..50dcc7a975 100644 --- a/indra/newview/llviewertexture.cpp +++ b/indra/newview/llviewertexture.cpp @@ -1898,13 +1898,11 @@ bool LLViewerFetchedTexture::processFetchResults(S32& desired_discard, S32 curre mRawDiscardLevel = INVALID_DISCARD_LEVEL; mIsFetching = false; mLastPacketTimer.reset(); - } - else - { - mIsRawImageValid = true; - addToCreateTexture(); + return false; } + mIsRawImageValid = true; + if (mBoostLevel == LLGLTexture::BOOST_ICON) { S32 expected_width = mKnownDrawWidth > 0 ? mKnownDrawWidth : DEFAULT_ICON_DIMENSIONS; @@ -1935,6 +1933,8 @@ bool LLViewerFetchedTexture::processFetchResults(S32& desired_discard, S32 curre } } + addToCreateTexture(); + return true; } else -- cgit v1.3 From a06a6f0a7b59fd4a68520dfc797f701573224c5c Mon Sep 17 00:00:00 2001 From: Andrey Lihatskiy Date: Fri, 6 Feb 2026 21:15:51 +0200 Subject: #5380 Guard against scaled() failure to prevent null dereference --- indra/newview/llviewertexture.cpp | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) (limited to 'indra/newview/llviewertexture.cpp') diff --git a/indra/newview/llviewertexture.cpp b/indra/newview/llviewertexture.cpp index 50dcc7a975..0f23596c9a 100644 --- a/indra/newview/llviewertexture.cpp +++ b/indra/newview/llviewertexture.cpp @@ -1914,7 +1914,11 @@ bool LLViewerFetchedTexture::processFetchResults(S32& desired_discard, S32 curre // // BOOST_ICON gets scaling because profile icons can have a bunch of different formats, not just j2c // Might need another pass to use discard for j2c and scaling for everything else. - mRawImage = mRawImage->scaled(expected_width, expected_height); + LLPointer scaled = mRawImage->scaled(expected_width, expected_height); + if (scaled.notNull()) + { + mRawImage = scaled; + } } } @@ -1929,7 +1933,11 @@ bool LLViewerFetchedTexture::processFetchResults(S32& desired_discard, S32 curre // // Todo: probably needs to be remade to use discard, all thumbnails are supposed to be j2c, // so no need to scale, should be posible to use discard to scale image down. - mRawImage = mRawImage->scaled(expected_width, expected_height); + LLPointer scaled = mRawImage->scaled(expected_width, expected_height); + if (scaled.notNull()) + { + mRawImage = scaled; + } } } -- cgit v1.3