code: func contextForChannel(parentCh <-chan struct{}) (context.Context, context.CancelFunc) {
  	ctx, cancel := context.WithCancel(context.Background())
  
  	go func() {
  		select {
  		case <-parentCh:
  			cancel()
  		case <-ctx.Done():
  		}
  	}()
  	return ctx, cancel
  }
docs: // contextForChannel derives a child context from a parent channel.
  //
  // The derived context's Done channel is closed when the returned cancel function
  // is called or when the parent channel is closed, whichever happens first.
  //
  // Note the caller must *always* call the CancelFunc, otherwise resources may be leaked.