From: <axl...@us...> - 2009-04-26 15:37:58
|
Revision: 218 http://hgengine.svn.sourceforge.net/hgengine/?rev=218&view=rev Author: axlecrusher Date: 2009-04-26 15:37:56 +0000 (Sun, 26 Apr 2009) Log Message: ----------- use auto pointer to protect against deleting objects while loading Modified Paths: -------------- Mercury2/src/ImageLoader.cpp Mercury2/src/ImageLoader.h Mercury2/src/MAutoPtr.h Modified: Mercury2/src/ImageLoader.cpp =================================================================== --- Mercury2/src/ImageLoader.cpp 2009-04-25 21:01:43 UTC (rev 217) +++ Mercury2/src/ImageLoader.cpp 2009-04-26 15:37:56 UTC (rev 218) @@ -8,9 +8,10 @@ { ThreadData *pd = (ThreadData*)d; ThreadData data = *pd; + Texture *texture = (Texture*)data.asset.Ptr(); delete pd; RawImageData* imageData = data.imageloader->LoadImage( data.filename ); - ((Texture*)data.asset)->SetRawData(imageData); + texture->SetRawData(imageData); data.asset->LoadedCallback(); return 0; } Modified: Mercury2/src/ImageLoader.h =================================================================== --- Mercury2/src/ImageLoader.h 2009-04-25 21:01:43 UTC (rev 217) +++ Mercury2/src/ImageLoader.h 2009-04-26 15:37:56 UTC (rev 218) @@ -31,7 +31,9 @@ filename = f; imageloader = il; } - MercuryAsset* asset; + + //use and autoptr here to prevent crashes if asset is removed during load + MAutoPtr< MercuryAsset > asset; MString filename; ImageLoader* imageloader; }; Modified: Mercury2/src/MAutoPtr.h =================================================================== --- Mercury2/src/MAutoPtr.h 2009-04-25 21:01:43 UTC (rev 217) +++ Mercury2/src/MAutoPtr.h 2009-04-26 15:37:56 UTC (rev 218) @@ -114,6 +114,8 @@ inline operator const T*() const { return m_ptr; } inline bool IsValid() { return m_ptr != NULL; } //true if valid + + inline T* Ptr() { return m_ptr; } private: void IncrementReference() //not thread safe, must guard { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |