summaryrefslogtreecommitdiff
path: root/internal/service/scan.go
diff options
context:
space:
mode:
authorPaul Buetow <paul@buetow.org>2026-05-04 00:17:29 +0300
committerPaul Buetow <paul@buetow.org>2026-05-04 00:17:29 +0300
commit71e004fb4e53ee4ac5c8fb202bad5f5c00dd8dac (patch)
tree5b5c817f8418e2777db376999cdffd3ef018239c /internal/service/scan.go
parentc68c54b0212ebc8d111b11c6edff82942c3a4463 (diff)
task b: inject app context into AdminService and propagate cancellation to background scans
Diffstat (limited to 'internal/service/scan.go')
-rw-r--r--internal/service/scan.go8
1 files changed, 6 insertions, 2 deletions
diff --git a/internal/service/scan.go b/internal/service/scan.go
index af17f95..ca4aca8 100644
--- a/internal/service/scan.go
+++ b/internal/service/scan.go
@@ -21,10 +21,11 @@ type scanService struct {
mu sync.Mutex
scanCancel context.CancelFunc
progress *model.ScanProgress
+ appCtx context.Context // application-level context used to propagate shutdown cancellation
}
// NewScanService creates a ScanService.
-func NewScanService(sc scanner.Scanner, mediaRoot string, clk clock.Clock, logger *slog.Logger) *scanService {
+func NewScanService(appCtx context.Context, sc scanner.Scanner, mediaRoot string, clk clock.Clock, logger *slog.Logger) *scanService {
if logger == nil {
logger = slog.Default()
}
@@ -33,6 +34,7 @@ func NewScanService(sc scanner.Scanner, mediaRoot string, clk clock.Clock, logge
mediaRoot: mediaRoot,
clock: clk,
logger: logger,
+ appCtx: appCtx,
}
}
@@ -45,7 +47,9 @@ func (s *scanService) TriggerRescan(ctx context.Context) error {
if s.scanCancel != nil {
s.scanCancel()
}
- scanCtx, cancel := context.WithTimeout(context.Background(), 30*time.Minute)
+ // Derive the scan context from the application-level context so that
+ // cancellation propagates on server exit, while still applying a 30-minute timeout.
+ scanCtx, cancel := context.WithTimeout(s.appCtx, 30*time.Minute)
s.scanCancel = cancel
progress := &model.ScanProgress{}
s.progress = progress