code: func (mp *TxPool) MaybeAcceptTransaction(tx *btcutil.Tx, isNew, rateLimit bool) ([]*chainhash.Hash, *TxDesc, error) {
  	// Protect concurrent access.
  	mp.mtx.Lock()
  	hashes, txD, err := mp.maybeAcceptTransaction(tx, isNew, rateLimit, true)
  	mp.mtx.Unlock()
  
  	return hashes, txD, err
  }
docs: // MaybeAcceptTransaction is the main workhorse for handling insertion of new
  // free-standing transactions into a memory pool.  It includes functionality
  // such as rejecting duplicate transactions, ensuring transactions follow all
  // rules, detecting orphan transactions, and insertion into the memory pool.
  //
  // If the transaction is an orphan (missing parent transactions), the
  // transaction is NOT added to the orphan pool, but each unknown referenced
  // parent is returned.  Use ProcessTransaction instead if new orphans should
  // be added to the orphan pool.
  //
  // This function is safe for concurrent access.