code: func (c *sharedContext) signal() {
  	select {
  	case <-c.done:
  	default:
  		var err error
  		for _, ctx := range c.ctxs {
  			select {
  			case <-ctx.Done():
  				err = ctx.Err()
  			default:
  				return
  			}
  		}
  		c.err = err
  		close(c.done)
  	}
  }
docs: // call with lock