diff --git a/lib/model/folder.go b/lib/model/folder.go index ffd167ab1..e77726c3c 100644 --- a/lib/model/folder.go +++ b/lib/model/folder.go @@ -520,6 +520,11 @@ func (f *folder) scanSubdirs(subDirs []string) error { } if err := batch.flushIfFull(); err != nil { + // Prevent a race between the scan aborting due to context + // cancellation and releasing the snapshot in defer here. + scanCancel() + for range fchan { + } return err } diff --git a/lib/scanner/blockqueue.go b/lib/scanner/blockqueue.go index 6c22714c2..a56187535 100644 --- a/lib/scanner/blockqueue.go +++ b/lib/scanner/blockqueue.go @@ -136,6 +136,10 @@ func (ph *parallelHasher) hashFiles(ctx context.Context) { func (ph *parallelHasher) closeWhenDone() { ph.wg.Wait() + // In case the hasher aborted on context, wait for filesystem + // walking/progress routine to finish. + for range ph.inbox { + } if ph.done != nil { close(ph.done) }