From 6413de66ac9fa645356bba56fa99ec58453dbecf Mon Sep 17 00:00:00 2001 From: unknown Date: Wed, 29 Oct 2025 22:58:10 +0100 Subject: [PATCH] fix closing games --- src/core/file_sys/vfs/vfs_real.cpp | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/src/core/file_sys/vfs/vfs_real.cpp b/src/core/file_sys/vfs/vfs_real.cpp index 1cf2cc8fd1..6efbb0428b 100644 --- a/src/core/file_sys/vfs/vfs_real.cpp +++ b/src/core/file_sys/vfs/vfs_real.cpp @@ -272,8 +272,12 @@ void RealVfsFilesystem::EvictSingleReferenceLocked() { void RealVfsFilesystem::InsertReferenceIntoListLocked(FileReference& reference) { // Ensure the node is not already linked to any list before inserting. if (reference.IsLinked()) { - // Unlink from whichever list it currently belongs to. - open_references.erase(open_references.iterator_to(reference)); + // Unlink from the list it currently belongs to. + if (reference.file) { + open_references.erase(open_references.iterator_to(reference)); + } else { + closed_references.erase(closed_references.iterator_to(reference)); + } } if (reference.file) { @@ -289,8 +293,12 @@ void RealVfsFilesystem::RemoveReferenceFromListLocked(FileReference& reference) return; } - // It's safe to erase via either list since erase only uses the node's links. - open_references.erase(open_references.iterator_to(reference)); + // Erase from the correct list to avoid cross-list corruption. + if (reference.file) { + open_references.erase(open_references.iterator_to(reference)); + } else { + closed_references.erase(closed_references.iterator_to(reference)); + } } RealVfsFile::RealVfsFile(RealVfsFilesystem& base_, std::unique_ptr reference_,