Skip to content

Commit

Permalink
Fix signaler on Windows
Browse files Browse the repository at this point in the history
  • Loading branch information
deluan committed Apr 28, 2024
1 parent 3d9fff3 commit 7ab7b5d
Show file tree
Hide file tree
Showing 3 changed files with 54 additions and 25 deletions.
25 changes: 0 additions & 25 deletions cmd/root.go
Original file line number Diff line number Diff line change
Expand Up @@ -122,31 +122,6 @@ func startServer(ctx context.Context) func() error {
}
}

func startSignaler(ctx context.Context) func() error {
log.Info("Starting signaler")
scanner := GetScanner()

return func() error {
var sigChan = make(chan os.Signal, 1)
signal.Notify(sigChan, syscall.SIGUSR1)

for {
select {
case sig := <-sigChan:
log.Info("Received signal, triggering a new scan", "signal", sig)
start := time.Now()
err := scanner.RescanAll(ctx, false)
if err != nil {
log.Error("Error scanning", err)
}
log.Info("Triggered scan complete", "elapsed", time.Since(start).Round(100*time.Millisecond))
case <-ctx.Done():
return nil
}
}
}
}

func schedulePeriodicScan(ctx context.Context) func() error {
return func() error {
schedule := conf.Server.ScanSchedule
Expand Down
14 changes: 14 additions & 0 deletions cmd/signaller_nounix.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
//go:build windows || plan9

package cmd

import (
"context"
)

// Windows and Plan9 don't support SIGUSR1, so we don't need to start a signaler
func startSignaler(ctx context.Context) func() error {
return func() error {
return nil
}
}
40 changes: 40 additions & 0 deletions cmd/signaller_unix.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
//go:build !windows && !plan9

package cmd

import (
"context"
"os"
"os/signal"
"syscall"
"time"

"github.com/navidrome/navidrome/log"
)

const triggerScanSignal = syscall.SIGUSR1

func startSignaler(ctx context.Context) func() error {
log.Info(ctx, "Starting signaler")
scanner := GetScanner()

return func() error {
var sigChan = make(chan os.Signal, 1)
signal.Notify(sigChan, triggerScanSignal)

for {
select {
case sig := <-sigChan:
log.Info(ctx, "Received signal, triggering a new scan", "signal", sig)
start := time.Now()
err := scanner.RescanAll(ctx, false)
if err != nil {
log.Error(ctx, "Error scanning", err)
}
log.Info(ctx, "Triggered scan complete", "elapsed", time.Since(start).Round(100*time.Millisecond))
case <-ctx.Done():
return nil
}
}
}
}

0 comments on commit 7ab7b5d

Please sign in to comment.