From 5b72d1606316a05fb0121b4244583b3435ea0db8 Mon Sep 17 00:00:00 2001 From: Andrei Karas Date: Fri, 27 May 2011 19:43:36 +0300 Subject: Call cleanOrphans after disconnecting from server. --- src/client.cpp | 3 +++ src/resources/resourcemanager.cpp | 4 ++-- src/resources/resourcemanager.h | 3 ++- 3 files changed, 7 insertions(+), 3 deletions(-) (limited to 'src') 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 deletedSurfaces; -- cgit v1.2.3-70-g09d2