code: func (b *BlockChain) LocateHeaders(locator BlockLocator, hashStop *chainhash.Hash) []wire.BlockHeader {
  	b.chainLock.RLock()
  	headers := b.locateHeaders(locator, hashStop, wire.MaxBlockHeadersPerMsg)
  	b.chainLock.RUnlock()
  	return headers
  }
docs: // LocateHeaders returns the headers of the blocks after the first known block
  // in the locator until the provided stop hash is reached, or up to a max of
  // wire.MaxBlockHeadersPerMsg headers.
  //
  // In addition, there are two special cases:
  //
  // - When no locators are provided, the stop hash is treated as a request for
  //   that header, so it will either return the header for the stop hash itself
  //   if it is known, or nil if it is unknown
  // - When locators are provided, but none of them are known, headers starting
  //   after the genesis block will be returned
  //
  // This function is safe for concurrent access.