From 433fd62de58e6bfb940377bd08ae464a69a8555b Mon Sep 17 00:00:00 2001 From: nukeykt Date: Mon, 16 Sep 2019 20:27:15 +0900 Subject: [PATCH] Purge resource manager cache on level load --- source/blood/src/blood.cpp | 5 ++++- source/blood/src/resource.cpp | 8 ++++++++ 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/source/blood/src/blood.cpp b/source/blood/src/blood.cpp index 6cb2af6b2..8ba90b99d 100644 --- a/source/blood/src/blood.cpp +++ b/source/blood/src/blood.cpp @@ -434,9 +434,12 @@ void PreloadCache(void) char tempbuf[128]; if (gDemo.at1) return; + gSysRes.PurgeCache(); + gSoundRes.PurgeCache(); + gSysRes.PrecacheSounds(); + gSoundRes.PrecacheSounds(); if (MusicRestartsOnLoadToggle) sndTryPlaySpecialMusic(MUS_LOADING); - gSoundRes.PrecacheSounds(); PreloadTiles(); ClockTicks clock = totalclock; int cnt = 0; diff --git a/source/blood/src/resource.cpp b/source/blood/src/resource.cpp index 14749421b..3c386e6f7 100644 --- a/source/blood/src/resource.cpp +++ b/source/blood/src/resource.cpp @@ -776,6 +776,14 @@ void Resource::PurgeCache(void) for (CACHENODE *node = purgeHead.next; node != &purgeHead; node = node->next) { DICTNODE *pDict = (DICTNODE*)node; + if (!(pDict->flags & DICT_LOAD)) + { + dassert(pDict->lockCount == 0); + dassert(pDict->ptr != NULL); + Free(pDict->ptr); + pDict->ptr = NULL; + RemoveMRU(pDict); + } } #endif }