From bcf4593bda20504f026e359413f226519cbb8d37 Mon Sep 17 00:00:00 2001 From: Tatsuhiro Tsujikawa Date: Thu, 11 Nov 2010 05:12:37 +0000 Subject: [PATCH] 2010-11-11 Tatsuhiro Tsujikawa Create SharedHandle outside of function call to avoid unexpected memory leak. * src/AnnounceList.cc * src/FtpNegotiationCommand.cc * src/HttpResponseCommand.cc * src/RequestGroup.cc * src/RequestGroupMan.cc * src/UTMetadataPostDownloadHandler.cc * src/download_helper.cc --- ChangeLog | 12 ++++++++++++ src/AnnounceList.cc | 3 ++- src/FtpNegotiationCommand.cc | 10 ++++------ src/HttpResponseCommand.cc | 9 ++++----- src/RequestGroup.cc | 14 +++++++------- src/RequestGroupMan.cc | 16 ++++++++-------- src/UTMetadataPostDownloadHandler.cc | 3 ++- src/download_helper.cc | 6 +++--- 8 files changed, 42 insertions(+), 31 deletions(-) diff --git a/ChangeLog b/ChangeLog index e717ea0f..7ece9ead 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,15 @@ +2010-11-11 Tatsuhiro Tsujikawa + + Create SharedHandle outside of function call to avoid unexpected + memory leak. + * src/AnnounceList.cc + * src/FtpNegotiationCommand.cc + * src/HttpResponseCommand.cc + * src/RequestGroup.cc + * src/RequestGroupMan.cc + * src/UTMetadataPostDownloadHandler.cc + * src/download_helper.cc + 2010-11-11 Tatsuhiro Tsujikawa Updated supported hash functions. diff --git a/src/AnnounceList.cc b/src/AnnounceList.cc index 3533ab37..c495798e 100644 --- a/src/AnnounceList.cc +++ b/src/AnnounceList.cc @@ -79,7 +79,8 @@ void AnnounceList::reconfigure void AnnounceList::reconfigure(const std::string& url) { std::deque urls; urls.push_back(url); - tiers_.push_back(SharedHandle(new AnnounceTier(urls))); + SharedHandle tier(new AnnounceTier(urls)); + tiers_.push_back(tier); resetIterator(); } diff --git a/src/FtpNegotiationCommand.cc b/src/FtpNegotiationCommand.cc index bf208e19..1c962575 100644 --- a/src/FtpNegotiationCommand.cc +++ b/src/FtpNegotiationCommand.cc @@ -431,12 +431,10 @@ bool FtpNegotiationCommand::onFileSizeDetermined(uint64_t totalLength) getSegmentMan()->getSegmentWithIndex(getCuid(), 0); return true; } else { - getRequestGroup()->adjustFilename - (SharedHandle - (new DefaultBtProgressInfoFile - (getDownloadContext(), - SharedHandle(), - getOption().get()))); + SharedHandle progressInfoFile + (new DefaultBtProgressInfoFile + (getDownloadContext(), SharedHandle(), getOption().get())); + getRequestGroup()->adjustFilename(progressInfoFile); getRequestGroup()->initPieceStorage(); if(getOption()->getAsBool(PREF_DRY_RUN)) { diff --git a/src/HttpResponseCommand.cc b/src/HttpResponseCommand.cc index 2971a0dc..fb90d5ae 100644 --- a/src/HttpResponseCommand.cc +++ b/src/HttpResponseCommand.cc @@ -293,11 +293,10 @@ bool HttpResponseCommand::handleDefaultEncoding (const SharedHandle& httpResponse) { SharedHandle httpRequest = httpResponse->getHttpRequest(); - getRequestGroup()->adjustFilename - (SharedHandle(new DefaultBtProgressInfoFile - (getDownloadContext(), - SharedHandle(), - getOption().get()))); + SharedHandle progressInfoFile + (new DefaultBtProgressInfoFile + (getDownloadContext(), SharedHandle(), getOption().get())); + getRequestGroup()->adjustFilename(progressInfoFile); getRequestGroup()->initPieceStorage(); if(getOption()->getAsBool(PREF_DRY_RUN)) { diff --git a/src/RequestGroup.cc b/src/RequestGroup.cc index d358c82e..e25d3e52 100644 --- a/src/RequestGroup.cc +++ b/src/RequestGroup.cc @@ -484,11 +484,10 @@ void RequestGroup::createInitialCommand (StringFormat(EX_DUPLICATE_FILE_DOWNLOAD, downloadContext_->getBasePath().c_str()).str()); } - adjustFilename - (SharedHandle(new DefaultBtProgressInfoFile - (downloadContext_, - SharedHandle(), - option_.get()))); + SharedHandle progressInfoFile + (new DefaultBtProgressInfoFile + (downloadContext_, SharedHandle(), option_.get())); + adjustFilename(progressInfoFile); initPieceStorage(); SharedHandle checkEntry = createCheckIntegrityEntry(); @@ -601,8 +600,9 @@ void RequestGroup::initPieceStorage() if(logger_->debug()) { logger_->debug("Using LongestSequencePieceSelector"); } - ps->setPieceSelector - (SharedHandle(new LongestSequencePieceSelector())); + SharedHandle longestPieceSelector + (new LongestSequencePieceSelector()); + ps->setPieceSelector(longestPieceSelector); } if(option_->defined(PREF_BT_PRIORITIZE_PIECE)) { std::vector result; diff --git a/src/RequestGroupMan.cc b/src/RequestGroupMan.cc index bba8b23c..7cd633c8 100644 --- a/src/RequestGroupMan.cc +++ b/src/RequestGroupMan.cc @@ -463,22 +463,22 @@ void RequestGroupMan::configureRequestGroup { const std::string& uriSelectorValue = option_->get(PREF_URI_SELECTOR); if(uriSelectorValue == V_FEEDBACK) { - requestGroup->setURISelector - (SharedHandle(new FeedbackURISelector(serverStatMan_))); + SharedHandle sel(new FeedbackURISelector(serverStatMan_)); + requestGroup->setURISelector(sel); } else if(uriSelectorValue == V_INORDER) { - requestGroup->setURISelector - (SharedHandle(new InOrderURISelector())); + SharedHandle sel(new InOrderURISelector()); + requestGroup->setURISelector(sel); } else if(uriSelectorValue == V_ADAPTIVE) { - requestGroup->setURISelector - (SharedHandle(new AdaptiveURISelector(serverStatMan_, - requestGroup.get()))); + SharedHandle sel(new AdaptiveURISelector(serverStatMan_, + requestGroup.get())); + requestGroup->setURISelector(sel); } } namespace { void createInitialCommand(const SharedHandle& requestGroup, std::vector& commands, - DownloadEngine* e) + DownloadEngine* e) { requestGroup->createInitialCommand(commands, e); } diff --git a/src/UTMetadataPostDownloadHandler.cc b/src/UTMetadataPostDownloadHandler.cc index 7a603d6b..6027d679 100644 --- a/src/UTMetadataPostDownloadHandler.cc +++ b/src/UTMetadataPostDownloadHandler.cc @@ -69,7 +69,8 @@ bool UTMetadataPostDownloadHandler::Criteria::match UTMetadataPostDownloadHandler::UTMetadataPostDownloadHandler(): logger_(LogFactory::getInstance()) { - setCriteria(SharedHandle(new Criteria())); + SharedHandle cri(new Criteria()); + setCriteria(cri); } void UTMetadataPostDownloadHandler::getNextRequestGroups diff --git a/src/download_helper.cc b/src/download_helper.cc index b33c033b..1f2a11e6 100644 --- a/src/download_helper.cc +++ b/src/download_helper.cc @@ -311,9 +311,9 @@ createBtMagnetRequestGroup(const std::string& magnetLink, dctx->getFirstFileEntry()->setPath(torrentAttrs->name); rg->setDownloadContext(dctx); rg->clearPostDownloadHandler(); - rg->addPostDownloadHandler - (SharedHandle - (new UTMetadataPostDownloadHandler())); + SharedHandle utMetadataPostHandler + (new UTMetadataPostDownloadHandler()); + rg->addPostDownloadHandler(utMetadataPostHandler); rg->setDiskWriterFactory (SharedHandle(new ByteArrayDiskWriterFactory())); rg->setMetadataInfo(createMetadataInfo(magnetLink));