1diff --git a/pkg/worker/exif_scanner.go b/pkg/worker/exif_scanner.go
2index 6d40dbd7435830a06fee5974cda18f20e73f67c0..d7865e39737f316d2fe38599868cd8bb9cf5ea6f 100644
3--- a/pkg/worker/exif_scanner.go
4+++ b/pkg/worker/exif_scanner.go
5@@ -33,8 +33,33 @@
6 return medias, nil
7 }
8
9+func wrapReadExif(ctx context.Context, path string) (*media.MediaEXIF, error) {
10+ c := make(chan *media.MediaEXIF)
11+ e := make(chan error)
12+ go func() {
13+ defer close(c)
14+ defer close(e)
15+
16+ newExif, err := fileop.ReadExif(path)
17+ if err != nil {
18+ e <- err
19+ } else {
20+ c <- newExif
21+ }
22+ }()
23+
24+ select {
25+ case <-ctx.Done():
26+ return nil, ctx.Err()
27+ case m := <-c:
28+ return m, nil
29+ case err := <-e:
30+ return nil, err
31+ }
32+}
33+
34 func (e *EXIFScanner) Process(ctx context.Context, m *media.Media) error {
35- newExif, err := fileop.ReadExif(m.Path)
36+ newExif, err := wrapReadExif(ctx, m.Path)
37 if err != nil {
38 return err
39 }