Правка условия гонки и оптимизация

Этот коммит содержится в:
Softonik 2024-02-28 17:00:03 +03:00 коммит произвёл Nobody
родитель 2803240615
коммит 3772187d95

Просмотреть файл

@ -108,7 +108,15 @@ func (s *Storage) createNewWatcher() (*fsnotify.Watcher, error) {
} }
func (s *Storage) watcherListener() { func (s *Storage) watcherListener() {
for { s.lock.RLock()
if s.watcher == nil {
s.lock.RUnlock()
s.reCreateWatcher()
return
}
defer s.lock.RUnlock()
select { select {
case event, ok := <-s.watcher.Events: case event, ok := <-s.watcher.Events:
if !ok { if !ok {
@ -122,7 +130,6 @@ func (s *Storage) watcherListener() {
log.Println("error:", err) log.Println("error:", err)
} }
} }
}
func (s *Storage) handleWatcherEvent(event fsnotify.Event) { func (s *Storage) handleWatcherEvent(event fsnotify.Event) {
log.Printf("Storage: %v: %v", s.filename, event.String()) log.Printf("Storage: %v: %v", s.filename, event.String())
@ -162,8 +169,13 @@ func (s *Storage) Close() {
s.closeWatcher() s.closeWatcher()
} }
func (s *Storage) closeWatcher() { func (s *Storage) closeWatcher() {
s.lock.RLock()
if s.watcher != nil { if s.watcher != nil {
s.watcher.Close() s.watcher.Close()
}
s.lock.RUnlock()
s.lock.Lock()
defer s.lock.Unlock()
s.watcher = nil s.watcher = nil
} }
}