summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/client.cpp3
-rw-r--r--src/resources/resourcemanager.cpp4
-rw-r--r--src/resources/resourcemanager.h3
3 files changed, 7 insertions, 3 deletions
diff --git a/src/client.cpp b/src/client.cpp
index 29c464180..d512ac6e4 100644
--- a/src/client.cpp
+++ b/src/client.cpp
@@ -793,6 +793,9 @@ int Client::exec()
{
delete game;
game = 0;
+ ResourceManager *resman = ResourceManager::getInstance();
+ if (resman)
+ resman->cleanOrphans();
}
mOldState = mState;
diff --git a/src/resources/resourcemanager.cpp b/src/resources/resourcemanager.cpp
index c0fe01ca8..a86edbb6f 100644
--- a/src/resources/resourcemanager.cpp
+++ b/src/resources/resourcemanager.cpp
@@ -171,14 +171,14 @@ void ResourceManager::cleanUp(Resource *res)
delete res;
}
-void ResourceManager::cleanOrphans()
+void ResourceManager::cleanOrphans(bool always)
{
timeval tv;
gettimeofday(&tv, NULL);
// Delete orphaned resources after 30 seconds.
time_t oldest = tv.tv_sec, threshold = oldest - 30;
- if (mOrphanedResources.empty() || mOldestOrphan >= threshold)
+ if (mOrphanedResources.empty() || (!always && mOldestOrphan >= threshold))
return;
ResourceIterator iter = mOrphanedResources.begin();
diff --git a/src/resources/resourcemanager.h b/src/resources/resourcemanager.h
index 8d1070463..71cbdce62 100644
--- a/src/resources/resourcemanager.h
+++ b/src/resources/resourcemanager.h
@@ -248,13 +248,14 @@ class ResourceManager
{ return &mOrphanedResources; }
#endif
+ void cleanOrphans(bool always = false);
+
private:
/**
* Deletes the resource after logging a cleanup message.
*/
static void cleanUp(Resource *resource);
- void cleanOrphans();
static ResourceManager *instance;
std::set<SDL_Surface*> deletedSurfaces;