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;