From 589aee0cee8fd72ff07fd2dc6043443e07097212 Mon Sep 17 00:00:00 2001 From: rubidium Date: Wed, 3 Feb 2010 17:12:19 +0000 Subject: [PATCH] (svn r18991) -Codechange: simplify memory management of DownloadSelectedContent --- src/network/network_content.cpp | 17 +++++++++-------- src/network/network_content.h | 3 ++- 2 files changed, 11 insertions(+), 9 deletions(-) diff --git a/src/network/network_content.cpp b/src/network/network_content.cpp index 2346ec3f2b..64acd86e07 100644 --- a/src/network/network_content.cpp +++ b/src/network/network_content.cpp @@ -253,21 +253,24 @@ void ClientNetworkContentSocketHandler::RequestContentList(ContentVector *cv, bo void ClientNetworkContentSocketHandler::DownloadSelectedContent(uint &files, uint &bytes) { - files = 0; bytes = 0; - /** Make the list of items to download */ - ContentID *ids = MallocT(infos.Length()); - for (ContentIterator iter = infos.Begin(); iter != infos.End(); iter++) { + ContentIDList content; + for (ContentIterator iter = this->infos.Begin(); iter != this->infos.End(); iter++) { const ContentInfo *ci = *iter; if (!ci->IsSelected() || ci->state == ContentInfo::ALREADY_HERE) continue; - ids[files++] = ci->id; + *content.Append() = ci->id; bytes += ci->filesize; } + files = content.Length(); + + /* If there's nothing to download, do nothing. */ + if (files == 0) return; + uint count = files; - ContentID *content_ids = ids; + ContentID *content_ids = content.Begin(); this->Connect(); while (count > 0) { @@ -288,8 +291,6 @@ void ClientNetworkContentSocketHandler::DownloadSelectedContent(uint &files, uin count -= p_count; content_ids += p_count; } - - free(ids); } /** diff --git a/src/network/network_content.h b/src/network/network_content.h index ad9ab37836..ea2df4e392 100644 --- a/src/network/network_content.h +++ b/src/network/network_content.h @@ -65,8 +65,9 @@ struct ContentCallback { */ class ClientNetworkContentSocketHandler : public NetworkContentSocketHandler, ContentCallback { protected: + typedef SmallVector ContentIDList; SmallVector callbacks; ///< Callbacks to notify "the world" - SmallVector requested; ///< ContentIDs we already requested (so we don't do it again) + ContentIDList requested; ///< ContentIDs we already requested (so we don't do it again) ContentVector infos; ///< All content info we received FILE *curFile; ///< Currently downloaded file