|
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.
|