···174174 return err
175175 }
176176177177+ // intermediate signal channel so if there are multiple watcher.Events we
178178+ // only call scan once.
179179+ signal := make(chan struct{}, 1)
180180+177181 go func() {
178182 for {
179183 select {
180184 case <-watcher.Events:
181181- s.scan()
185185+ select {
186186+ case signal <- struct{}{}:
187187+ default:
188188+ }
182189 case err := <-watcher.Errors:
183183- if err != nil {
190190+ // Ignore ErrEventOverflow since we rely on the presence of events so
191191+ // safe to ignore.
192192+ if err != nil && err != fsnotify.ErrEventOverflow {
184193 log.Println("watcher error:", err)
185194 }
186195 case <-quitter:
187196 watcher.Close()
197197+ close(signal)
188198 return
189199 }
190200 }
191201 }()
202202+203203+ go func() {
204204+ for range signal {
205205+ s.scan()
206206+ }
207207+ }()
208208+192209 return nil
193210}