From 73fda8cfbf6b4e60162b2262aa932da60563dc07 Mon Sep 17 00:00:00 2001 From: Shawn Hoffman Date: Sun, 25 Oct 2009 02:03:45 +0000 Subject: Fix a possible crash on close due to INANDContentLoader objects getting deleted twice git-svn-id: https://dolphin-emu.googlecode.com/svn/trunk@4463 8ced0084-cf51-0410-be5f-012b33b47a6e --- Source/Core/DiscIO/Src/NANDContentLoader.cpp | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) (limited to 'Source/Core/DiscIO/Src/NANDContentLoader.cpp') diff --git a/Source/Core/DiscIO/Src/NANDContentLoader.cpp b/Source/Core/DiscIO/Src/NANDContentLoader.cpp index 93fd9458f3..1d6c9e7746 100644 --- a/Source/Core/DiscIO/Src/NANDContentLoader.cpp +++ b/Source/Core/DiscIO/Src/NANDContentLoader.cpp @@ -164,7 +164,7 @@ CNANDContentLoader::CNANDContentLoader(const std::string& _rName) } else { -// _dbg_assert_msg_(BOOT, 0, "CNANDContentLoader loads neither folder nor file"); + _dbg_assert_msg_(BOOT, 0, "CNANDContentLoader loads neither folder nor file"); } } @@ -362,14 +362,12 @@ CNANDContentManager::~CNANDContentManager() const INANDContentLoader& CNANDContentManager::GetNANDLoader(const std::string& _rName) { - std::string KeyString(_rName); + CNANDContentMap::iterator lb = m_Map.lower_bound(_rName); - CNANDContentMap::iterator itr = m_Map.find(KeyString); - if (itr != m_Map.end()) - return *itr->second; + if(lb == m_Map.end() || (m_Map.key_comp()(_rName, lb->first))) + m_Map.insert(lb, CNANDContentMap::value_type(_rName, new CNANDContentLoader(_rName))); - m_Map[KeyString] = new CNANDContentLoader(KeyString); - return *m_Map[KeyString]; + return *m_Map[_rName]; } } // namespace end -- cgit v1.2.3