Browse Source

Merge pull request #13390 from gnattu/catch-ioexception

Catch IOExceptions for GetFileSystemMetadata
Joshua M. Boniface 4 tháng trước cách đây
mục cha
commit
3766a88bea
1 tập tin đã thay đổi với 10 bổ sung0 xóa
  1. 10 0
      Emby.Server.Implementations/IO/ManagedFileSystem.cs

+ 10 - 0
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
         /// <inheritdoc />
         public virtual IEnumerable<FileSystemMetadata> 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);