in ctxtool/merge.go [113:132]
func (c *mergeCancelCtx) waitCancel(chDone chan struct{}) {
var err error
defer func() {
c.mu.Lock()
defer c.mu.Unlock()
if c.err == nil {
c.err = err
close(chDone)
}
}()
select {
case <-chDone: // CancelFunc triggered cleanup
case <-c.Context.Done():
err = c.Context.Err()
case <-c.cancel.Done():
err = c.cancel.Err()
}
}