From 4dc93e343e0fb4990320e1056bca666e8ce8c3d9 Mon Sep 17 00:00:00 2001 From: Andrei Karas Date: Wed, 3 Oct 2012 17:04:56 +0300 Subject: fix memory problems with atlases. --- src/resources/resourcemanager.cpp | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) (limited to 'src/resources/resourcemanager.cpp') diff --git a/src/resources/resourcemanager.cpp b/src/resources/resourcemanager.cpp index b6befb491..ba23e4ac2 100644 --- a/src/resources/resourcemanager.cpp +++ b/src/resources/resourcemanager.cpp @@ -258,7 +258,7 @@ void ResourceManager::logResource(const Resource *const res) #endif } -void ResourceManager::clearDeleted() +void ResourceManager::clearDeleted(bool full) { bool status(true); logger->log("clear deleted"); @@ -280,7 +280,7 @@ void ResourceManager::clearDeleted() ++ resDelIter; } } - if (!mDeletedResources.empty()) + if (full && !mDeletedResources.empty()) { logger->log("leaks in deleted"); std::set::iterator resDelIter = mDeletedResources.begin(); @@ -783,8 +783,21 @@ void ResourceManager::release(Resource *const res) ResourceIterator resIter = mResources.find(res->mIdPath); + if (resIter == mResources.end()) + { + logger->log("no resource in cache: " + res->mIdPath); + delete res; + return; + } + if (resIter->second != res) + { + logger->log("in cache other image: " + res->mIdPath); + delete res; + return; + } + // The resource has to exist - assert(resIter != mResources.end() && resIter->second == res); +// assert(resIter != mResources.end() && resIter->second == res); timeval tv; gettimeofday(&tv, nullptr); -- cgit v1.2.3-60-g2f50