mirror of
https://git.eden-emu.dev/eden-emu/eden
synced 2026-04-10 05:28:56 +02:00
[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 <lizzie@eden-emu.dev> Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/3593 Reviewed-by: DraVee <dravee@eden-emu.dev> Reviewed-by: MaranBr <maranbr@eden-emu.dev> Reviewed-by: CamilleLaVey <camillelavey99@gmail.com> Co-authored-by: lizzie <lizzie@eden-emu.dev> Co-committed-by: lizzie <lizzie@eden-emu.dev>
This commit is contained in:
parent
f94bae10f2
commit
b6238d6df7
2 changed files with 12 additions and 2 deletions
|
|
@ -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-License-Identifier: GPL-3.0-or-later
|
||||||
|
|
||||||
// SPDX-FileCopyrightText: Copyright 2018 yuzu Emulator Project
|
// SPDX-FileCopyrightText: Copyright 2018 yuzu Emulator Project
|
||||||
|
|
@ -52,7 +52,9 @@ constexpr FS::FileAccessMode ModeFlagsToFileAccessMode(OpenMode mode) {
|
||||||
} // Anonymous namespace
|
} // Anonymous namespace
|
||||||
|
|
||||||
RealVfsFilesystem::RealVfsFilesystem() : VfsFilesystem(nullptr) {}
|
RealVfsFilesystem::RealVfsFilesystem() : VfsFilesystem(nullptr) {}
|
||||||
RealVfsFilesystem::~RealVfsFilesystem() = default;
|
RealVfsFilesystem::~RealVfsFilesystem() {
|
||||||
|
in_dtor = true;
|
||||||
|
}
|
||||||
|
|
||||||
std::string RealVfsFilesystem::GetName() const {
|
std::string RealVfsFilesystem::GetName() const {
|
||||||
return "Real";
|
return "Real";
|
||||||
|
|
@ -224,6 +226,9 @@ std::unique_lock<std::mutex> RealVfsFilesystem::RefreshReference(const std::stri
|
||||||
}
|
}
|
||||||
|
|
||||||
void RealVfsFilesystem::DropReference(std::unique_ptr<FileReference>&& reference) {
|
void RealVfsFilesystem::DropReference(std::unique_ptr<FileReference>&& reference) {
|
||||||
|
if (in_dtor)
|
||||||
|
return;
|
||||||
|
|
||||||
std::scoped_lock lk{list_lock};
|
std::scoped_lock lk{list_lock};
|
||||||
|
|
||||||
// Remove from list.
|
// Remove from list.
|
||||||
|
|
|
||||||
|
|
@ -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-FileCopyrightText: Copyright 2018 yuzu Emulator Project
|
||||||
// SPDX-License-Identifier: GPL-2.0-or-later
|
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||||
|
|
||||||
|
|
@ -52,6 +55,8 @@ private:
|
||||||
ReferenceListType closed_references;
|
ReferenceListType closed_references;
|
||||||
std::mutex list_lock;
|
std::mutex list_lock;
|
||||||
size_t num_open_files{};
|
size_t num_open_files{};
|
||||||
|
// TODO: Workaround for improper dtor() ordering on clang + FreeBSD
|
||||||
|
bool in_dtor = false;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
friend class RealVfsFile;
|
friend class RealVfsFile;
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue