From 6e671281a26089d7cf947236162afc8013d25ec8 Mon Sep 17 00:00:00 2001
From: Loren Shih <seraph@lindenlab.com>
Date: Fri, 7 Jan 2011 17:16:28 -0500
Subject: SH-759 FIXED Various crashes in model floater after you open file
 picker then cancel

Took out erroneous logic for handling when a file picker is canceled.
Reviewed by Davep.
---
 indra/newview/llfloatermodelpreview.cpp | 20 ++++++++++++--------
 1 file changed, 12 insertions(+), 8 deletions(-)

diff --git a/indra/newview/llfloatermodelpreview.cpp b/indra/newview/llfloatermodelpreview.cpp
index c0b5b7cfa6..f57d524b46 100755
--- a/indra/newview/llfloatermodelpreview.cpp
+++ b/indra/newview/llfloatermodelpreview.cpp
@@ -379,7 +379,8 @@ LLFloaterModelPreview::~LLFloaterModelPreview()
 {
 	sInstance = NULL;
 
-	if ( mModelPreview->mModelLoader->mResetJoints )
+	const LLModelLoader *model_loader = mModelPreview->mModelLoader;
+	if (model_loader && model_loader->mResetJoints)
 	{
 		gAgentAvatarp->resetJointPositions();
 	}
@@ -2373,11 +2374,9 @@ void LLModelPreview::loadModel(std::string filename, S32 lod)
 
 	LLMutexLock lock(this);
 
-	if (mModelLoader)
-	{
-		delete mModelLoader;
-		mModelLoader = NULL;
-	}
+	// This triggers if you bring up the file picker and then hit CANCEL.
+	// Just use the previous model (if any) and ignore that you brought up
+	// the file picker.
 
 	if (filename.empty())
 	{
@@ -2386,12 +2385,17 @@ void LLModelPreview::loadModel(std::string filename, S32 lod)
 			// this is the initial file picking. Close the whole floater
 			// if we don't have a base model to show for high LOD.
 			mFMP->closeFloater(false);
+			mLoading = false;
 		}
-
-		mLoading = false;
 		return;
 	}
 
+	if (mModelLoader)
+	{
+		delete mModelLoader;
+		mModelLoader = NULL;
+	}
+
 	mLODFile[lod] = filename;
 
 	if (lod == LLModel::LOD_HIGH)
-- 
cgit v1.2.3