From b70afac286ce723b2b0d71b81e0a5dcf0e0034d2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pedro=20J=2E=20Est=C3=A9banez?= Date: Mon, 13 May 2024 11:51:36 +0200 Subject: Add an identity check to resource unregistration from cache This is needed because resources loaded with CACHE_MODE_IGNORE still have path_cache set. --- core/io/resource.cpp | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) (limited to 'core/io/resource.cpp') diff --git a/core/io/resource.cpp b/core/io/resource.cpp index 4c3cfeaa58..00b669aa1c 100644 --- a/core/io/resource.cpp +++ b/core/io/resource.cpp @@ -570,11 +570,18 @@ Resource::Resource() : remapped_list(this) {} Resource::~Resource() { - if (!path_cache.is_empty()) { - ResourceCache::lock.lock(); - ResourceCache::resources.erase(path_cache); - ResourceCache::lock.unlock(); + if (unlikely(path_cache.is_empty())) { + return; } + + ResourceCache::lock.lock(); + // Only unregister from the cache if this is the actual resource listed there. + // (Other resources can have the same value in `path_cache` if loaded with `CACHE_IGNORE`.) + HashMap::Iterator E = ResourceCache::resources.find(path_cache); + if (likely(E && E->value == this)) { + ResourceCache::resources.remove(E); + } + ResourceCache::lock.unlock(); } HashMap ResourceCache::resources; -- cgit v1.2.3