diff options
author | Xiaohong Bao <bao@lindenlab.com> | 2011-04-29 18:14:32 -0600 |
---|---|---|
committer | Xiaohong Bao <bao@lindenlab.com> | 2011-04-29 18:14:32 -0600 |
commit | ee06fde19392d060276c21104385e292a00f4bff (patch) | |
tree | 462cac9ac078dd561b7c54e46470db6dcbf68009 /indra/newview | |
parent | 873bd8ce26798fbea625b2323e7a84229ed92343 (diff) | |
parent | d7954ba38f81172f0062ae55479aff0709615bdd (diff) |
Automated merge with http://hg.secondlife.com/mesh-development
Diffstat (limited to 'indra/newview')
-rw-r--r-- | indra/newview/llfloatermodelpreview.cpp | 34 | ||||
-rw-r--r-- | indra/newview/llfloatermodelpreview.h | 8 | ||||
-rw-r--r-- | indra/newview/llpanellogin.cpp | 13 |
3 files changed, 51 insertions, 4 deletions
diff --git a/indra/newview/llfloatermodelpreview.cpp b/indra/newview/llfloatermodelpreview.cpp index c66b2255eb..ae0e1b7d46 100644 --- a/indra/newview/llfloatermodelpreview.cpp +++ b/indra/newview/llfloatermodelpreview.cpp @@ -104,6 +104,7 @@ //static S32 LLFloaterModelPreview::sUploadAmount = 10; LLFloaterModelPreview* LLFloaterModelPreview::sInstance = NULL; +std::list<LLModelLoader*> LLModelLoader::sActiveLoaderList; const S32 PREVIEW_BORDER_WIDTH = 2; const S32 PREVIEW_RESIZE_HANDLE_SIZE = S32(RESIZE_HANDLE_WIDTH * OO_SQRT2) + PREVIEW_BORDER_WIDTH; @@ -1087,6 +1088,15 @@ LLModelLoader::LLModelLoader( std::string filename, S32 lod, LLModelPreview* pre { mTrySLM = false; } + + assert_main_thread(); + sActiveLoaderList.push_back(this) ; +} + +LLModelLoader::~LLModelLoader() +{ + assert_main_thread(); + sActiveLoaderList.remove(this); } void stretch_extents(LLModel* model, LLMatrix4a& mat, LLVector4a& min, LLVector4a& max, BOOL& first_transform) @@ -1872,8 +1882,24 @@ bool LLModelLoader::loadFromSLM(const std::string& filename) return true; } +//static +bool LLModelLoader::isAlive(LLModelLoader* loader) +{ + if(!loader) + { + return false ; + } + + std::list<LLModelLoader*>::iterator iter = sActiveLoaderList.begin() ; + for(; iter != sActiveLoaderList.end() && (*iter) != loader; ++iter) ; + + return *iter == loader ; +} + void LLModelLoader::loadModelCallback() { + assert_main_thread(); + if (mPreview) { mPreview->loadModelCallback(mLod); @@ -1884,6 +1910,12 @@ void LLModelLoader::loadModelCallback() apr_sleep(100); } + //doubel check if "this" is valid before deleting it, in case it is aborted during running. + if(!isAlive(this)) + { + return ; + } + //cleanup model loader if (mPreview) { @@ -2693,7 +2725,7 @@ LLModelPreview::~LLModelPreview() if (mModelLoader) { delete mModelLoader; - mModelLoader->mPreview = NULL; + mModelLoader = NULL; } //*HACK : *TODO : turn this back on when we understand why this crashes //glodShutdown(); diff --git a/indra/newview/llfloatermodelpreview.h b/indra/newview/llfloatermodelpreview.h index 837484adb6..7927edcd36 100644 --- a/indra/newview/llfloatermodelpreview.h +++ b/indra/newview/llfloatermodelpreview.h @@ -80,7 +80,7 @@ public: BOOL mFirstTransform; LLVector3 mExtents[2]; bool mTrySLM; - + std::map<daeElement*, LLPointer<LLModel> > mModel; typedef std::vector<LLPointer<LLModel> > model_list; @@ -99,6 +99,8 @@ public: LLModelLoader( std::string filename, S32 lod, LLModelPreview* preview, JointTransformMap& jointMap, std::deque<std::string>& jointsFromNodes ); + ~LLModelLoader() ; + virtual void run(); bool doLoadModel(); bool loadFromSLM(const std::string& filename); @@ -131,6 +133,10 @@ public: std::map<std::string, std::string> mJointMap; JointTransformMap& mJointList; std::deque<std::string>& mJointsFromNode; + +private: + static std::list<LLModelLoader*> sActiveLoaderList; + static bool isAlive(LLModelLoader* loader) ; }; class LLFloaterModelPreview : public LLFloater diff --git a/indra/newview/llpanellogin.cpp b/indra/newview/llpanellogin.cpp index 979d96ca0d..ab031a9dc3 100644 --- a/indra/newview/llpanellogin.cpp +++ b/indra/newview/llpanellogin.cpp @@ -34,6 +34,7 @@ #include "llmd5.h" #include "llsecondlifeurls.h" #include "v4color.h" +#include "llversionviewer.h" #include "llappviewer.h" #include "llbutton.h" @@ -861,12 +862,20 @@ void LLPanelLogin::loadLoginPage() LLVersionInfo::getShortVersion().c_str(), LLVersionInfo::getBuild()); - char* curl_channel = curl_escape(LLVersionInfo::getChannel().c_str(), 0); + char* curl_channel ; char* curl_version = curl_escape(version.c_str(), 0); + if(strcmp(LLVersionInfo::getChannel().c_str(), LL_CHANNEL)) + { + curl_channel = curl_escape(LLVersionInfo::getChannel().c_str(), 0); + } + else //if LL_CHANNEL, direct it to "Second Life Beta Viewer". + { + curl_channel = curl_escape("Second Life Beta Viewer", 0); + } oStr << "&channel=" << curl_channel; oStr << "&version=" << curl_version; - + curl_free(curl_channel); curl_free(curl_version); |