From b6238d6df76ecbef12f295ee0ef702e18542f109 Mon Sep 17 00:00:00 2001 From: lizzie Date: Sat, 21 Feb 2026 13:47:48 +0100 Subject: [PATCH] [vfs] fix crash at dtor() time (#3593) Not very happy with the "solution" Either way, this affected FBSD where opening then closing the emu would result in a crash, always. Signed-off-by: lizzie Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/3593 Reviewed-by: DraVee Reviewed-by: MaranBr Reviewed-by: CamilleLaVey Co-authored-by: lizzie Co-committed-by: lizzie --- src/core/file_sys/vfs/vfs_real.cpp | 9 +++++++-- src/core/file_sys/vfs/vfs_real.h | 5 +++++ 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/src/core/file_sys/vfs/vfs_real.cpp b/src/core/file_sys/vfs/vfs_real.cpp index 4199667171..2c3cb26907 100644 --- a/src/core/file_sys/vfs/vfs_real.cpp +++ b/src/core/file_sys/vfs/vfs_real.cpp @@ -1,4 +1,4 @@ -// SPDX-FileCopyrightText: Copyright 2025 Eden Emulator Project +// SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project // SPDX-License-Identifier: GPL-3.0-or-later // SPDX-FileCopyrightText: Copyright 2018 yuzu Emulator Project @@ -52,7 +52,9 @@ constexpr FS::FileAccessMode ModeFlagsToFileAccessMode(OpenMode mode) { } // Anonymous namespace RealVfsFilesystem::RealVfsFilesystem() : VfsFilesystem(nullptr) {} -RealVfsFilesystem::~RealVfsFilesystem() = default; +RealVfsFilesystem::~RealVfsFilesystem() { + in_dtor = true; +} std::string RealVfsFilesystem::GetName() const { return "Real"; @@ -224,6 +226,9 @@ std::unique_lock RealVfsFilesystem::RefreshReference(const std::stri } void RealVfsFilesystem::DropReference(std::unique_ptr&& reference) { + if (in_dtor) + return; + std::scoped_lock lk{list_lock}; // Remove from list. diff --git a/src/core/file_sys/vfs/vfs_real.h b/src/core/file_sys/vfs/vfs_real.h index a773fc375a..672126d7ba 100644 --- a/src/core/file_sys/vfs/vfs_real.h +++ b/src/core/file_sys/vfs/vfs_real.h @@ -1,3 +1,6 @@ +// SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project +// SPDX-License-Identifier: GPL-3.0-or-later + // SPDX-FileCopyrightText: Copyright 2018 yuzu Emulator Project // SPDX-License-Identifier: GPL-2.0-or-later @@ -52,6 +55,8 @@ private: ReferenceListType closed_references; std::mutex list_lock; size_t num_open_files{}; + // TODO: Workaround for improper dtor() ordering on clang + FreeBSD + bool in_dtor = false; private: friend class RealVfsFile;