From 25370e10b66231ff95086f0104c6aee641876763 Mon Sep 17 00:00:00 2001 From: Dave Houlton Date: Mon, 31 Jan 2022 16:38:53 -0700 Subject: SL-16418 add tear-down lock --- indra/newview/llviewermedia.cpp | 12 +++++------- indra/newview/llviewermedia.h | 1 + 2 files changed, 6 insertions(+), 7 deletions(-) diff --git a/indra/newview/llviewermedia.cpp b/indra/newview/llviewermedia.cpp index 6c04321539..c2087b7c35 100644 --- a/indra/newview/llviewermedia.cpp +++ b/indra/newview/llviewermedia.cpp @@ -1702,11 +1702,13 @@ void LLViewerMediaImpl::destroyMediaSource() cancelMimeTypeProbe(); + mLock.lock(); // Delay tear-down while bg thread is updating if(mMediaSource) { mMediaSource->setDeleteOK(true) ; mMediaSource = NULL; // shared pointer } + mLock.unlock(); } ////////////////////////////////////////////////////////////////////////////////////////// @@ -2901,16 +2903,11 @@ void LLViewerMediaImpl::update() return; } - // Push update to worker thread auto main_queue = LLMediaTextureUpdateThread::sEnabled ? mMainQueue.lock() : nullptr; ref(); // protect texture from deletion while active on bg queue if (main_queue) { - // replace GL name - //llassert(!mTextureId.isNull()); - //LLImageGL* base_image = LLViewerTextureManager::getMediaTexture(mTextureId)->getGLTexture(); - //GLuint retired_name = base_image->allocNew(); main_queue->postTo( mTexUpdateQueue, // Worker thread queue [this]() // work done on update worker thread @@ -2934,12 +2931,12 @@ void LLViewerMediaImpl::update() void LLViewerMediaImpl::doMediaTexUpdate() { LL_PROFILE_ZONE_SCOPED_CATEGORY_MEDIA; + mLock.lock(); // don't allow media source tear-down during update + LLViewerMediaTexture* media_tex = updateMediaImage(); if (media_tex && mMediaSource) { - llassert(mMediaSource); - LLRect dirty_rect; S32 media_width = mMediaSource->getTextureWidth(); S32 media_height = mMediaSource->getTextureHeight(); @@ -2987,6 +2984,7 @@ void LLViewerMediaImpl::doMediaTexUpdate() mMediaSource->resetDirty(); } } + mLock.unlock(); } ////////////////////////////////////////////////////////////////////////////////////////// diff --git a/indra/newview/llviewermedia.h b/indra/newview/llviewermedia.h index 03a14421ff..0afb2162ab 100644 --- a/indra/newview/llviewermedia.h +++ b/indra/newview/llviewermedia.h @@ -432,6 +432,7 @@ private: private: // a single media url with some data and an impl. boost::shared_ptr mMediaSource; + LLMutex mLock; F64 mZoomFactor; LLUUID mTextureId; bool mMovieImageHasMips; -- cgit v1.2.3