Browse Source
[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>
pull/3597/head
lizzie
4 days ago
committed by
crueter
No known key found for this signature in database
GPG Key ID: 425ACD2D4830EBC6
2 changed files with
12 additions and
2 deletions
src/core/file_sys/vfs/vfs_real.cpp
src/core/file_sys/vfs/vfs_real.h
@ -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 ;