Skip to content

Commit bedf884

Browse files
committed
viewer#3133 Callback related crash in LLViewerFetchedTexture
Seems to be realted to LLModelPreview and path generated textures so I'm improving cleanup.
1 parent 97f0a21 commit bedf884

File tree

2 files changed

+6
-4
lines changed

2 files changed

+6
-4
lines changed

indra/newview/llmodelpreview.cpp

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -227,6 +227,8 @@ LLModelPreview::~LLModelPreview()
227227
}
228228
mBaseModel.clear();
229229
mBaseScene.clear();
230+
231+
LLLoadedCallbackEntry::cleanUpCallbackList(&mCallbackTextureList);
230232
}
231233

232234
void LLModelPreview::updateDimentionsAndOffsets()
@@ -553,7 +555,7 @@ void LLModelPreview::rebuildUploadData()
553555
{
554556
// in case user provided a missing file later
555557
texture->setIsMissingAsset(false);
556-
texture->setLoadedCallback(LLModelPreview::textureLoadedCallback, 0, true, false, this, NULL, false);
558+
texture->setLoadedCallback(LLModelPreview::textureLoadedCallback, 0, true, false, this, &mCallbackTextureList, false);
557559
texture->forceToSaveRawImage(0, F32_MAX);
558560
texture->updateFetch();
559561
if (mModelLoader)
@@ -3130,8 +3132,6 @@ LLJoint* LLModelPreview::lookupJointByName(const std::string& str, void* opaque)
31303132

31313133
U32 LLModelPreview::loadTextures(LLImportMaterial& material, void* opaque)
31323134
{
3133-
(void)opaque;
3134-
31353135
if (material.mDiffuseMapFilename.size())
31363136
{
31373137
material.mOpaqueData = new LLPointer< LLViewerFetchedTexture >;
@@ -3145,7 +3145,8 @@ U32 LLModelPreview::loadTextures(LLImportMaterial& material, void* opaque)
31453145
}
31463146
// Todo: might cause a crash if preview gets closed before we get the callback.
31473147
// Use a callback list or guard callback in some way
3148-
tex->setLoadedCallback(LLModelPreview::textureLoadedCallback, 0, true, false, opaque, NULL, false);
3148+
LLModelPreview* preview = (LLModelPreview*)opaque;
3149+
tex->setLoadedCallback(LLModelPreview::textureLoadedCallback, 0, true, false, opaque, &preview->mCallbackTextureList, false);
31493150
tex->forceToSaveRawImage(0, F32_MAX);
31503151
material.setDiffuseMap(tex->getID()); // record tex ID
31513152
return 1;

indra/newview/llmodelpreview.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -316,6 +316,7 @@ class LLModelPreview : public LLViewerDynamicTexture, public LLMutex
316316

317317
LLMeshUploadThread::instance_list mUploadData;
318318
std::set<LLViewerFetchedTexture * > mTextureSet;
319+
LLLoadedCallbackEntry::source_callback_list_t mCallbackTextureList;
319320

320321
//map of vertex buffers to models (one vertex buffer in vector per face in model
321322
std::map<LLModel*, std::vector<LLPointer<LLVertexBuffer> > > mVertexBuffer[LLModel::NUM_LODS + 1];

0 commit comments

Comments
 (0)