diff --git a/src/DownloadEngine.h b/src/DownloadEngine.h index dad7773a..eb827b97 100644 --- a/src/DownloadEngine.h +++ b/src/DownloadEngine.h @@ -131,8 +131,6 @@ private: int64_t refreshInterval_; Timer lastRefresh_; - std::deque> routineCommands_; - std::unique_ptr cookieStorage_; #ifdef ENABLE_BITTORRENT @@ -167,11 +165,14 @@ private: std::multimap::iterator findSocketPoolEntry(const std::string& key); - std::deque> commands_; std::unique_ptr requestGroupMan_; std::unique_ptr fileAllocationMan_; std::unique_ptr checkIntegrityMan_; Option* option_; + // Ensure that Commands are cleaned up before requestGroupMan_ is + // deleted. + std::deque> routineCommands_; + std::deque> commands_; public: DownloadEngine(std::unique_ptr eventPoll); diff --git a/src/InternalMessageDigestImpl.cc b/src/InternalMessageDigestImpl.cc index d5aabc66..b74fe053 100644 --- a/src/InternalMessageDigestImpl.cc +++ b/src/InternalMessageDigestImpl.cc @@ -49,22 +49,27 @@ template class MessageDigestBase : public MessageDigestImpl { public: - MessageDigestBase() { reset(); } - virtual ~MessageDigestBase() { + MessageDigestBase() : ctx_(nullptr) { reset(); } + virtual ~MessageDigestBase() + { free_fn(&ctx_); } - static size_t length() { + static size_t length() + { return dlen; } - virtual size_t getDigestLength() const CXX11_OVERRIDE { + virtual size_t getDigestLength() const CXX11_OVERRIDE + { return dlen; } - virtual void reset() CXX11_OVERRIDE { - printf("hash-%d\n", dlen); + virtual void reset() CXX11_OVERRIDE + { + free_fn(&ctx_); init_fn(&ctx_); } - virtual void update(const void* data, size_t length) CXX11_OVERRIDE { + virtual void update(const void* data, size_t length) CXX11_OVERRIDE + { auto bytes = reinterpret_cast(data); while (length) { size_t l = std::min(length, (size_t)std::numeric_limits::max()); @@ -73,7 +78,8 @@ public: bytes += l; } } - virtual void digest(unsigned char* md) CXX11_OVERRIDE { + virtual void digest(unsigned char* md) CXX11_OVERRIDE + { final_fn(ctx_, md); } private: @@ -99,7 +105,7 @@ MessageDigestSHA1; std::unique_ptr MessageDigestImpl::sha1() { - return std::unique_ptr(new MessageDigestSHA1()); + return make_unique(); } MessageDigestImpl::hashes_t MessageDigestImpl::hashes = { diff --git a/src/MessageDigestImpl.h b/src/MessageDigestImpl.h index 0cee1cb5..ef6a7b87 100644 --- a/src/MessageDigestImpl.h +++ b/src/MessageDigestImpl.h @@ -40,7 +40,7 @@ #include #include -#include +#include #include #include