// Must be single threaded (w.r.t. stats access). func collectStats(fileCh chan *dm.File, stats *dm.LeadingWhitespaceStatistics, ctrl GoRtnCntrl) { defer ctrl.wg.Done() for { select { case <-ctrl.stopCh: return case file, ok := <-fileCh: if !ok { return } stats.AddFile(file) } } }