code: func (p *MsgPipeRW) Close() error {
  	if atomic.AddInt32(p.closed, 1) != 1 {
  		// someone else is already closing
  		atomic.StoreInt32(p.closed, 1) // avoid overflow
  		return nil
  	}
  	close(p.closing)
  	return nil
  }
docs: // Close unblocks any pending ReadMsg and WriteMsg calls on both ends
  // of the pipe. They will return ErrPipeClosed. Close also
  // interrupts any reads from a message payload.