diff options
author | Yuri Gorshenin <y@maps.me> | 2015-09-15 11:12:32 +0300 |
---|---|---|
committer | Alex Zolotarev <alex@maps.me> | 2015-09-23 03:05:17 +0300 |
commit | fb7b1382a8783c863e58bacb31ada0032e9661c2 (patch) | |
tree | 703713b91549f3e375b10d2d409d46df50f6cf36 /indexer/mwm_set.hpp | |
parent | b2fd03c0877ac34ebe54cc256eb809a5fd289478 (diff) |
[indexer] Fixed memory leaks related to MwmValues.
Diffstat (limited to 'indexer/mwm_set.hpp')
-rw-r--r-- | indexer/mwm_set.hpp | 25 |
1 files changed, 12 insertions, 13 deletions
diff --git a/indexer/mwm_set.hpp b/indexer/mwm_set.hpp index 5cd6f84b98..fb705ce7de 100644 --- a/indexer/mwm_set.hpp +++ b/indexer/mwm_set.hpp @@ -13,6 +13,7 @@ #include "std/mutex.hpp" #include "std/shared_ptr.hpp" #include "std/string.hpp" +#include "std/unique_ptr.hpp" #include "std/utility.hpp" #include "std/vector.hpp" @@ -112,8 +113,6 @@ public: virtual ~MwmValueBase() = default; }; - using TMwmValuePtr = MwmValueBase *; - // Mwm handle, which is used to refer to mwm and prevent it from // deletion when its FileContainer is used. class MwmHandle final @@ -127,10 +126,10 @@ public: template <typename T> inline T * GetValue() const { - return static_cast<T *>(m_value); + return static_cast<T *>(m_value.get()); } - inline bool IsAlive() const { return m_value; } + inline bool IsAlive() const { return m_value.get() != nullptr; } inline MwmId const & GetId() const { return m_mwmId; } shared_ptr<MwmInfo> const & GetInfo() const; @@ -139,11 +138,11 @@ public: private: friend class MwmSet; - MwmHandle(MwmSet & mwmSet, MwmId const & mwmId, TMwmValuePtr value); + MwmHandle(MwmSet & mwmSet, MwmId const & mwmId, unique_ptr<MwmValueBase> && value); MwmSet * m_mwmSet; MwmId m_mwmId; - TMwmValuePtr m_value; + unique_ptr<MwmValueBase> m_value; DISALLOW_COPY(MwmHandle); }; @@ -218,19 +217,19 @@ public: protected: /// @return True when file format version was successfully read to MwmInfo. - virtual MwmInfo * CreateInfo(platform::LocalCountryFile const & localFile) const = 0; - virtual MwmValueBase * CreateValue(MwmInfo & info) const = 0; + virtual unique_ptr<MwmInfo> CreateInfo(platform::LocalCountryFile const & localFile) const = 0; + virtual unique_ptr<MwmValueBase> CreateValue(MwmInfo & info) const = 0; private: - typedef deque<pair<MwmId, TMwmValuePtr>> CacheType; + typedef deque<pair<MwmId, unique_ptr<MwmValueBase>>> CacheType; /// @precondition This function is always called under mutex m_lock. MwmHandle GetMwmHandleByIdImpl(MwmId const & id); - TMwmValuePtr LockValue(MwmId const & id); - TMwmValuePtr LockValueImpl(MwmId const & id); - void UnlockValue(MwmId const & id, TMwmValuePtr p); - void UnlockValueImpl(MwmId const & id, TMwmValuePtr p); + unique_ptr<MwmValueBase> LockValue(MwmId const & id); + unique_ptr<MwmValueBase> LockValueImpl(MwmId const & id); + void UnlockValue(MwmId const & id, unique_ptr<MwmValueBase> && p); + void UnlockValueImpl(MwmId const & id, unique_ptr<MwmValueBase> && p); /// Do the cleaning for [beg, end) without acquiring the mutex. /// @precondition This function is always called under mutex m_lock. |