in pkg/sync/pool/pool.go [320:357]
func (p *Pool) monitor(interrupt chan os.Signal) {
if interrupt == nil {
interrupt = make(chan os.Signal, 1)
}
signal.Notify(interrupt, os.Interrupt, syscall.SIGTERM)
var interrupted bool
for {
select {
case <-p.signals.Finish:
p.state.Processed.Add(1)
case <-p.signals.Added:
p.state.Queued.Add(1)
case err := <-p.errors:
p.state.Errors.Add(err)
if p.failFast {
if p.writer != nil {
fmt.Fprintln(p.writer, failFastSetStopMsg)
}
//nolint
go p.Stop()
}
case <-interrupt:
if interrupted {
continue
}
interrupted = true
if p.writer != nil {
fmt.Fprintln(p.writer, "pool: received interrupt, stopping pool...")
}
//nolint
go p.Stop()
case <-p.signals.StopMonitor:
p.state.monitoring = false
break
}
p.updateState()
}
}