code: func (s *server) pushTxMsg(sp *serverPeer, hash *chainhash.Hash, doneChan chan<- struct{},
  	waitChan <-chan struct{}, encoding wire.MessageEncoding) error {
  
  	// Attempt to fetch the requested transaction from the pool.  A
  	// call could be made to check for existence first, but simply trying
  	// to fetch a missing transaction results in the same behavior.
  	tx, err := s.txMemPool.FetchTransaction(hash)
  	if err != nil {
  		peerLog.Tracef("Unable to fetch tx %v from transaction "+
  			"pool: %v", hash, err)
  
  		if doneChan != nil {
  			doneChan <- struct{}{}
  		}
  		return err
  	}
  
  	// Once we have fetched data wait for any previous operation to finish.
  	if waitChan != nil {
  		<-waitChan
  	}
  
  	sp.QueueMessageWithEncoding(tx.MsgTx(), doneChan, encoding)
  
  	return nil
  }
docs: // pushTxMsg sends a tx message for the provided transaction hash to the
  // connected peer.  An error is returned if the transaction hash is not known.