diff --git a/cmd/server/main.go b/cmd/server/main.go index da1f523..edea1e6 100644 --- a/cmd/server/main.go +++ b/cmd/server/main.go @@ -110,7 +110,7 @@ func main() { logger.Errorf("Failed to open clients-file: %v", err) os.Exit(1) } - d.StartHotReload(10 * time.Second) + d.StartHotReload(ctx, 10*time.Second) db = d logger.Infof("Client ID authorization enabled via %s", cfg.ClientsFile) } diff --git a/internal/clientsdb/db.go b/internal/clientsdb/db.go index 49bf3fc..00477da 100644 --- a/internal/clientsdb/db.go +++ b/internal/clientsdb/db.go @@ -1,6 +1,7 @@ package clientsdb import ( + "context" "encoding/json" "fmt" "io" @@ -41,12 +42,17 @@ func New(path string) (*DB, error) { return db, nil } -func (db *DB) StartHotReload(interval time.Duration) { +func (db *DB) StartHotReload(ctx context.Context, interval time.Duration) { go func() { ticker := time.NewTicker(interval) defer ticker.Stop() - for range ticker.C { - db.loadIfModified() + for { + select { + case <-ctx.Done(): + return + case <-ticker.C: + db.loadIfModified() + } } }() }