From dc280564503654fca10ccbce13d486fec25ca105 Mon Sep 17 00:00:00 2001 From: gnattu Date: Mon, 3 Feb 2025 17:07:09 -0500 Subject: [PATCH] Backport pull request #13390 from jellyfin/release-10.10.z Catch IOExceptions for GetFileSystemMetadata Original-merge: 3766a88beaa4f1a9e8ab90f3ade24b474b1dde6c Merged-by: joshuaboniface Backported-by: Bond_009 --- Emby.Server.Implementations/IO/ManagedFileSystem.cs | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/Emby.Server.Implementations/IO/ManagedFileSystem.cs b/Emby.Server.Implementations/IO/ManagedFileSystem.cs index 46c128dedc..66b7839f77 100644 --- a/Emby.Server.Implementations/IO/ManagedFileSystem.cs +++ b/Emby.Server.Implementations/IO/ManagedFileSystem.cs @@ -276,6 +276,13 @@ namespace Emby.Server.Implementations.IO { _logger.LogError(ex, "Reading the file at {Path} failed due to a permissions exception.", fileInfo.FullName); } + catch (IOException ex) + { + // IOException generally means the file is not accessible due to filesystem issues + // Catch this exception and mark the file as not exist to ignore it + _logger.LogError(ex, "Reading the file at {Path} failed due to an IO Exception. Marking the file as not existing", fileInfo.FullName); + result.Exists = false; + } } } @@ -590,6 +597,9 @@ namespace Emby.Server.Implementations.IO /// public virtual IEnumerable GetFileSystemEntries(string path, bool recursive = false) { + // Note: any of unhandled exceptions thrown by this method may cause the caller to believe the whole path is not accessible. + // But what causing the exception may be a single file under that path. This could lead to unexpected behavior. + // For example, the scanner will remove everything in that path due to unhandled errors. var directoryInfo = new DirectoryInfo(path); var enumerationOptions = GetEnumerationOptions(recursive);