fix for SH-648: Crash on exit in LLViewerFetchedTexture (ref count error)
parent
8bca21e23b
commit
8ba0baa631
|
|
@ -1262,6 +1262,7 @@ bool LLAppViewer::mainLoop()
|
|||
break;
|
||||
}
|
||||
}
|
||||
gMeshRepo.update() ;
|
||||
|
||||
if(!total_work_pending) //pause texture fetching threads if nothing to process.
|
||||
{
|
||||
|
|
|
|||
|
|
@ -475,10 +475,10 @@ void LLFloaterModelPreview::onPreviewLODCommit(LLUICtrl* ctrl, void* userdata)
|
|||
|
||||
S32 which_mode = 0;
|
||||
|
||||
LLComboBox* combo = (LLComboBox*) ctrl;
|
||||
|
||||
which_mode = (NUM_LOD-1)-combo->getFirstSelectedIndex(); // combo box list of lods is in reverse order
|
||||
|
||||
LLComboBox* combo = (LLComboBox*) ctrl;
|
||||
|
||||
which_mode = (NUM_LOD-1)-combo->getFirstSelectedIndex(); // combo box list of lods is in reverse order
|
||||
|
||||
fp->mModelPreview->setPreviewLOD(which_mode);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -52,7 +52,7 @@ class domTranslate;
|
|||
class LLMenuButton;
|
||||
class LLToggleableMenu;
|
||||
|
||||
const S32 NUM_LOD = 4;
|
||||
const S32 NUM_LOD = 4;
|
||||
|
||||
class LLModelLoader : public LLThread
|
||||
{
|
||||
|
|
|
|||
|
|
@ -1486,7 +1486,7 @@ void LLMeshUploadThread::run()
|
|||
{
|
||||
textures.insert(material_iter->mDiffuseMap);
|
||||
|
||||
LLTextureUploadData data(material_iter->mDiffuseMap, material_iter->mDiffuseMapLabel);
|
||||
LLTextureUploadData data(material_iter->mDiffuseMap.get(), material_iter->mDiffuseMapLabel);
|
||||
uploadTexture(data);
|
||||
}
|
||||
}
|
||||
|
|
@ -2135,6 +2135,24 @@ void LLMeshRepository::shutdown()
|
|||
LLConvexDecomposition::quitSystem();
|
||||
}
|
||||
|
||||
//called in the main thread.
|
||||
S32 LLMeshRepository::update()
|
||||
{
|
||||
if(mUploadWaitList.empty())
|
||||
{
|
||||
return 0 ;
|
||||
}
|
||||
|
||||
S32 size = mUploadWaitList.size() ;
|
||||
for (S32 i = 0; i < size; ++i)
|
||||
{
|
||||
mUploads.push_back(mUploadWaitList[i]);
|
||||
mUploadWaitList[i]->start() ;
|
||||
}
|
||||
mUploadWaitList.clear() ;
|
||||
|
||||
return size ;
|
||||
}
|
||||
|
||||
S32 LLMeshRepository::loadMesh(LLVOVolume* vobj, const LLVolumeParams& mesh_params, S32 detail)
|
||||
{
|
||||
|
|
@ -2654,8 +2672,7 @@ void LLMeshRepository::uploadModel(std::vector<LLModelInstance>& data, LLVector3
|
|||
bool upload_skin, bool upload_joints)
|
||||
{
|
||||
LLMeshUploadThread* thread = new LLMeshUploadThread(data, scale, upload_textures, upload_skin, upload_joints);
|
||||
mUploads.push_back(thread);
|
||||
thread->start();
|
||||
mUploadWaitList.push_back(thread);
|
||||
}
|
||||
|
||||
S32 LLMeshRepository::getMeshSize(const LLUUID& mesh_id, S32 lod)
|
||||
|
|
@ -2742,7 +2759,7 @@ void LLMeshUploadThread::sendCostRequest(LLMeshUploadData& data)
|
|||
|
||||
void LLMeshUploadThread::sendCostRequest(LLTextureUploadData& data)
|
||||
{
|
||||
if (data.mTexture.notNull() && data.mTexture->getDiscardLevel() >= 0)
|
||||
if (data.mTexture && data.mTexture->getDiscardLevel() >= 0)
|
||||
{
|
||||
LLSD asset_resources = LLSD::emptyMap();
|
||||
|
||||
|
|
|
|||
|
|
@ -65,7 +65,7 @@ public:
|
|||
class LLTextureUploadData
|
||||
{
|
||||
public:
|
||||
LLPointer<LLViewerFetchedTexture> mTexture;
|
||||
LLViewerFetchedTexture* mTexture;
|
||||
LLUUID mUUID;
|
||||
std::string mRSVP;
|
||||
std::string mLabel;
|
||||
|
|
@ -399,7 +399,7 @@ public:
|
|||
std::queue<LLTextureUploadData> mTextureQ;
|
||||
std::queue<LLTextureUploadData> mConfirmedTextureQ;
|
||||
|
||||
std::map<LLPointer<LLViewerFetchedTexture>, LLTextureUploadData> mTextureMap;
|
||||
std::map<LLViewerFetchedTexture*, LLTextureUploadData> mTextureMap;
|
||||
|
||||
LLMeshUploadThread(instance_list& data, LLVector3& scale, bool upload_textures,
|
||||
bool upload_skin, bool upload_joints);
|
||||
|
|
@ -442,6 +442,7 @@ public:
|
|||
|
||||
void init();
|
||||
void shutdown();
|
||||
S32 update() ;
|
||||
|
||||
//mesh management functions
|
||||
S32 loadMesh(LLVOVolume* volume, const LLVolumeParams& mesh_params, S32 detail = 0);
|
||||
|
|
@ -505,6 +506,7 @@ public:
|
|||
|
||||
LLMeshRepoThread* mThread;
|
||||
std::vector<LLMeshUploadThread*> mUploads;
|
||||
std::vector<LLMeshUploadThread*> mUploadWaitList;
|
||||
|
||||
LLPhysicsDecomp* mDecompThread;
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue