Fix AssetsManager crash by protect Downloader with shared_ptr

This commit is contained in:
pandamicro 2015-08-04 12:45:49 +08:00
parent a8a0516bf4
commit 37030a427c
2 changed files with 4 additions and 1 deletions

View File

@ -81,7 +81,7 @@ AssetsManagerEx::AssetsManagerEx(const std::string& manifestUrl, const std::stri
_fileUtils = FileUtils::getInstance();
_updateState = State::UNCHECKED;
_downloader = std::make_shared<Downloader>();
_downloader = std::shared_ptr<Downloader>(new Downloader);
_downloader->setConnectionTimeout(DEFAULT_CONNECTION_TIMEOUT);
_downloader->_onError = std::bind(&AssetsManagerEx::onError, this, std::placeholders::_1);
_downloader->_onProgress = std::bind(&AssetsManagerEx::onProgress,

View File

@ -392,6 +392,7 @@ void Downloader::downloadToBufferSync(const std::string &srcUrl, unsigned char *
void Downloader::downloadToBuffer(const std::string &srcUrl, const std::string &customId, const StreamData &buffer, const ProgressData &data)
{
std::weak_ptr<Downloader> ptr = shared_from_this();
std::shared_ptr<Downloader> shared = ptr.lock();
CURL *curl = curl_easy_init();
if (!curl)
{
@ -463,6 +464,7 @@ void Downloader::downloadSync(const std::string &srcUrl, const std::string &stor
void Downloader::download(const std::string &srcUrl, const std::string &customId, const FileDescriptor &fDesc, const ProgressData &data)
{
std::weak_ptr<Downloader> ptr = shared_from_this();
std::shared_ptr<Downloader> shared = ptr.lock();
CURL *curl = curl_easy_init();
if (!curl)
{
@ -524,6 +526,7 @@ void Downloader::batchDownloadSync(const DownloadUnits &units, const std::string
{
// Make sure downloader won't be released
std::weak_ptr<Downloader> ptr = shared_from_this();
std::shared_ptr<Downloader> shared = ptr.lock();
if (units.size() != 0)
{