[game_list] fix crash and flashing from the directory watcher (#4099)

So the game list watcher could rebuild the content providers
(CreateFactories) while the populate worker was still scanning them, and
the worker would walk a torn-down RegisteredCache and segfault in
OpenFileOrDirectoryConcat. Fixed by stopping and joining the worker
before rebuilding.

On macOS the watcher also re-armed itself every populate. Re-adding the
same paths makes QFileSystemWatcher re-emit directoryChanged (the
FSEvent comes in async, so the blockSignals guard misses it), so it just
kept refreshing and the list flashed forever. Now it only re-arms when
the watched dirs actually changed.

Also null-guarded OpenFileOrDirectoryConcat so a torn-down cache cant
null-deref there.

Related: https://github.com/eden-emulator/Issue-Reports/issues/336
Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/4099
Reviewed-by: Lizzie <lizzie@eden-emu.dev>
Reviewed-by: MaranBr <maranbr@eden-emu.dev>
This commit is contained in:
BoiledElectricity 2026-06-16 16:20:02 +02:00 committed by crueter
parent c27266c4cd
commit ce14fc91fb
No known key found for this signature in database
GPG key ID: 425ACD2D4830EBC6
4 changed files with 50 additions and 16 deletions

View file

@ -503,6 +503,9 @@ NcaID PlaceholderCache::Generate() {
VirtualFile RegisteredCache::OpenFileOrDirectoryConcat(const VirtualDir& open_dir,
std::string_view path) const {
if (open_dir == nullptr) {
return nullptr;
}
const auto file = open_dir->GetFileRelative(path);
if (file != nullptr) {
return file;