diff options
Diffstat (limited to 'indra/viewer_components')
| -rw-r--r-- | indra/viewer_components/updater/llupdatechecker.cpp | 14 | ||||
| -rw-r--r-- | indra/viewer_components/updater/llupdatedownloader.cpp | 18 | 
2 files changed, 21 insertions, 11 deletions
| diff --git a/indra/viewer_components/updater/llupdatechecker.cpp b/indra/viewer_components/updater/llupdatechecker.cpp index d31244cc9b..c6aa9b0f11 100644 --- a/indra/viewer_components/updater/llupdatechecker.cpp +++ b/indra/viewer_components/updater/llupdatechecker.cpp @@ -70,7 +70,6 @@ private:  	Client & mClient;  	LLHTTPClient mHttpClient;  	bool mInProgress; -	LLHTTPClient::ResponderPtr mMe;   	std::string mVersion;  	std::string buildUrl(std::string const & protocolVersion, std::string const & hostUrl,  @@ -109,8 +108,7 @@ const char * LLUpdateChecker::Implementation::sProtocolVersion = "v1.0";  LLUpdateChecker::Implementation::Implementation(LLUpdateChecker::Client & client):  	mClient(client), -	mInProgress(false), -	mMe(this) +	mInProgress(false)  {  	; // No op.  } @@ -118,7 +116,7 @@ LLUpdateChecker::Implementation::Implementation(LLUpdateChecker::Client & client  LLUpdateChecker::Implementation::~Implementation()  { -	mMe.reset(0); +	; // No op.  } @@ -136,9 +134,11 @@ void LLUpdateChecker::Implementation::check(std::string const & protocolVersion,  	// The HTTP client will wrap a raw pointer in a boost::intrusive_ptr causing the  	// passed object to be silently and automatically deleted.  We pass a self- -	// referential intrusive pointer stored as an attribute of this class to keep -	// the client from deletig the update checker implementation instance. -	mHttpClient.get(checkUrl, mMe); +	// referential intrusive pointer to which we add a reference to keep the +	// client from deleting the update checker implementation instance. +	LLHTTPClient::ResponderPtr temporaryPtr(this); +	boost::intrusive_ptr_add_ref(temporaryPtr.get()); +	mHttpClient.get(checkUrl, temporaryPtr);  }  void LLUpdateChecker::Implementation::completed(U32 status, diff --git a/indra/viewer_components/updater/llupdatedownloader.cpp b/indra/viewer_components/updater/llupdatedownloader.cpp index ca1d2d25de..208cc48c12 100644 --- a/indra/viewer_components/updater/llupdatedownloader.cpp +++ b/indra/viewer_components/updater/llupdatedownloader.cpp @@ -154,8 +154,7 @@ LLUpdateDownloader::Implementation::Implementation(LLUpdateDownloader::Client &  	LLThread("LLUpdateDownloader"),  	mCancelled(false),  	mClient(client), -	mCurl(0), -	mDownloadRecordPath(LLUpdateDownloader::downloadMarkerPath()) +	mCurl(0)  {  	CURLcode code = curl_global_init(CURL_GLOBAL_ALL); // Just in case.  	llverify(code == CURLE_OK); // TODO: real error handling here.  @@ -164,6 +163,12 @@ LLUpdateDownloader::Implementation::Implementation(LLUpdateDownloader::Client &  LLUpdateDownloader::Implementation::~Implementation()  { +	if(isDownloading()) { +		cancel(); +		shutdown(); +	} else { +		; // No op. +	}  	if(mCurl) curl_easy_cleanup(mCurl);  } @@ -177,7 +182,8 @@ void LLUpdateDownloader::Implementation::cancel(void)  void LLUpdateDownloader::Implementation::download(LLURI const & uri, std::string const & hash)  {  	if(isDownloading()) mClient.downloadError("download in progress"); -	 + +	mDownloadRecordPath = downloadMarkerPath();  	mDownloadData = LLSD();  	try {  		startDownloading(uri, hash); @@ -195,6 +201,9 @@ bool LLUpdateDownloader::Implementation::isDownloading(void)  void LLUpdateDownloader::Implementation::resume(void)  { +	if(isDownloading()) mClient.downloadError("download in progress"); + +	mDownloadRecordPath = downloadMarkerPath();  	llifstream dataStream(mDownloadRecordPath);  	if(!dataStream) {  		mClient.downloadError("no download marker"); @@ -272,6 +281,7 @@ size_t LLUpdateDownloader::Implementation::onBody(void * buffer, size_t size)  void LLUpdateDownloader::Implementation::run(void)  {  	CURLcode code = curl_easy_perform(mCurl); +	mDownloadStream.close();  	if(code == CURLE_OK) {  		LLFile::remove(mDownloadRecordPath);  		if(validateDownload()) { @@ -379,7 +389,7 @@ void LLUpdateDownloader::Implementation::throwOnCurlError(CURLcode code)  bool LLUpdateDownloader::Implementation::validateDownload(void)  {  	std::string filePath = mDownloadData["path"].asString(); -	llifstream fileStream(filePath); +	llifstream fileStream(filePath, std::ios_base::in | std::ios_base::binary);  	if(!fileStream) return false;  	std::string hash = mDownloadData["hash"].asString(); | 
