diff --git a/lib/model/folder.go b/lib/model/folder.go index 8f1692542..c6aab7db9 100644 --- a/lib/model/folder.go +++ b/lib/model/folder.go @@ -394,8 +394,12 @@ func (f *folder) scanSubdirs(subDirs []string) error { f.setState(FolderScanning) + // If we return early e.g. due to a folder health error, the scan needs + // to be cancelled. + scanCtx, scanCancel := context.WithCancel(f.ctx) + defer scanCancel() mtimefs := f.fset.MtimeFS() - fchan := scanner.Walk(f.ctx, scanner.Config{ + fchan := scanner.Walk(scanCtx, scanner.Config{ Folder: f.ID, Subs: subDirs, Matcher: f.ignores, @@ -885,6 +889,7 @@ func (f *folder) String() string { func (f *folder) newScanError(path string, err error) { f.scanErrorsMut.Lock() + l.Infof("Scanner (folder %s, item %q): %v", f.Description(), path, err) f.scanErrors = append(f.scanErrors, FileError{ Err: err.Error(), Path: path, diff --git a/lib/scanner/walk.go b/lib/scanner/walk.go index 39114ac4f..e180c8e5a 100644 --- a/lib/scanner/walk.go +++ b/lib/scanner/walk.go @@ -531,7 +531,6 @@ func (w *walker) handleError(ctx context.Context, context, path string, err erro if fs.IsNotExist(err) { return } - l.Infof("Scanner (folder %s, item %q): %s: %v", w.Folder, path, context, err) select { case finishedChan <- ScanResult{ Err: fmt.Errorf("%s: %w", context, err),