static void removeUnfundedOffers (ApplyView& view, std::vector<uint256> const& offers, beast::Journal viewJ) { int removed = 0; for (auto const& index : offers) { if (auto const sleOffer = view.peek (keylet::offer (index))) { // offer is unfunded offerDelete (view, sleOffer, viewJ); if (++removed == unfundedOfferRemoveLimit) return; } } }
// Handle the case where a directory item with no corresponding ledger entry // is found. This shouldn't happen but if it does we clean it up. void OfferStream::erase (ApplyView& view) { // NIKB NOTE This should be using ApplyView::dirDelete, which would // correctly remove the directory if its the last entry. // Unfortunately this is a protocol breaking change. auto p = view.peek (keylet::page(tip_.dir())); if (p == nullptr) { JLOG(j_.error) << "Missing directory " << tip_.dir() << " for offer " << tip_.index(); return; } auto v (p->getFieldV256 (sfIndexes)); auto it (std::find (v.begin(), v.end(), tip_.index())); if (it == v.end()) { JLOG(j_.error) << "Missing offer " << tip_.index() << " for directory " << tip_.dir(); return; } v.erase (it); p->setFieldV256 (sfIndexes, v); view.update (p); JLOG(j_.trace) << "Missing offer " << tip_.index() << " removed from directory " << tip_.dir(); }