From d1301b8697f6d2a1c0c547c504317495406ab0f7 Mon Sep 17 00:00:00 2001 From: Nils Maier <maierman@web.de> Date: Tue, 26 Feb 2013 10:40:51 +0100 Subject: [PATCH] Do not reference RequestGroups longer than necessary There is an initial vector of SharedHandle<RequestGroup> to seed the DownloadEngine. This vector was however kept alive via main.cc -> MultiUrlRequestInfo up until the program exits, hence effetively leaking all initial RequestGroups and associated object instances. Hence, as a matter of dirty-workaround, drop the contents of that initial vector as soon as it is not required any longer. --- src/MultiUrlRequestInfo.cc | 4 +++- src/MultiUrlRequestInfo.h | 8 ++++++-- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/src/MultiUrlRequestInfo.cc b/src/MultiUrlRequestInfo.cc index 0d8a224a..389e40ca 100644 --- a/src/MultiUrlRequestInfo.cc +++ b/src/MultiUrlRequestInfo.cc @@ -104,7 +104,7 @@ void handler(int signal) { } // namespace MultiUrlRequestInfo::MultiUrlRequestInfo -(const std::vector<SharedHandle<RequestGroup> >& requestGroups, +(std::vector<SharedHandle<RequestGroup> >& requestGroups, const SharedHandle<Option>& op, const SharedHandle<StatCalc>& statCalc, const SharedHandle<OutputFile>& summaryOut, @@ -158,6 +158,8 @@ error_code::Value MultiUrlRequestInfo::execute() SharedHandle<DownloadEngine> e = DownloadEngineFactory().newDownloadEngine(option_.get(), requestGroups_); + // Avoid keeping RequestGroups alive longer than necessary + requestGroups_.clear(); if(!option_->blank(PREF_LOAD_COOKIES)) { File cookieFile(option_->get(PREF_LOAD_COOKIES)); diff --git a/src/MultiUrlRequestInfo.h b/src/MultiUrlRequestInfo.h index cdc84bc4..45a627df 100644 --- a/src/MultiUrlRequestInfo.h +++ b/src/MultiUrlRequestInfo.h @@ -52,7 +52,7 @@ class UriListParser; class MultiUrlRequestInfo { private: - std::vector<SharedHandle<RequestGroup> > requestGroups_; + std::vector<SharedHandle<RequestGroup> >& requestGroups_; SharedHandle<Option> option_; @@ -64,8 +64,12 @@ private: void printMessageForContinue(); public: + /* + * MultiRequestInfo effectively takes ownership of the + * requestGroups. + */ MultiUrlRequestInfo - (const std::vector<SharedHandle<RequestGroup> >& requestGroups, + (std::vector<SharedHandle<RequestGroup> >& requestGroups, const SharedHandle<Option>& op, const SharedHandle<StatCalc>& statCalc, const SharedHandle<OutputFile>& summaryOut,