diff --git a/pkg/storage/storage.go b/pkg/storage/storage.go index 4136881..4ac02af 100644 --- a/pkg/storage/storage.go +++ b/pkg/storage/storage.go @@ -108,19 +108,26 @@ func (s *Storage) createNewWatcher() (*fsnotify.Watcher, error) { } func (s *Storage) watcherListener() { - for { - select { - case event, ok := <-s.watcher.Events: - if !ok { - return - } - s.handleWatcherEvent(event) - case err, ok := <-s.watcher.Errors: - if !ok { - return - } - log.Println("error:", err) + s.lock.RLock() + if s.watcher == nil { + s.lock.RUnlock() + s.reCreateWatcher() + return + } + + defer s.lock.RUnlock() + + select { + case event, ok := <-s.watcher.Events: + if !ok { + return } + s.handleWatcherEvent(event) + case err, ok := <-s.watcher.Errors: + if !ok { + return + } + log.Println("error:", err) } } func (s *Storage) handleWatcherEvent(event fsnotify.Event) { @@ -162,8 +169,13 @@ func (s *Storage) Close() { s.closeWatcher() } func (s *Storage) closeWatcher() { + s.lock.RLock() if s.watcher != nil { s.watcher.Close() - s.watcher = nil } + s.lock.RUnlock() + + s.lock.Lock() + defer s.lock.Unlock() + s.watcher = nil }