1
0
Fork 0
forked from lthn/blockchain

wallet2: fix an issue in prepare_tx_sources() where some transfers may be locked if there's was exception during preparing phase

This commit is contained in:
sowle 2024-04-05 14:09:27 +02:00
parent 92c6a9d51d
commit fa67466d20
No known key found for this signature in database
GPG key ID: C07A24B2D89D49FC

View file

@ -6234,10 +6234,18 @@ bool wallet2::prepare_tx_sources_for_defragmentation_tx(std::vector<currency::tx
//----------------------------------------------------------------------------------------------------
bool wallet2::prepare_tx_sources(assets_selection_context& needed_money_map, size_t fake_outputs_count, uint64_t dust_threshold, std::vector<currency::tx_source_entry>& sources, std::vector<uint64_t>& selected_indicies)
{
bool r = select_transfers(needed_money_map, fake_outputs_count, dust_threshold, selected_indicies);
if (!r)
return r;
return prepare_tx_sources(fake_outputs_count, sources, selected_indicies);
try
{
select_transfers(needed_money_map, fake_outputs_count, dust_threshold, selected_indicies); // always returns true, TODO consider refactoring -- sowle
return prepare_tx_sources(fake_outputs_count, sources, selected_indicies);
}
catch(...)
{
// if smth went wrong -- invalidate transfers cache to trigger its regeneration on the next use
// it is necessary because it may be in invalid state (some items might be erased within select_indices_for_transfer() or expand_selection_with_zc_input())
m_found_free_amounts.clear();
throw;
}
}
//----------------------------------------------------------------------------------------------------
void wallet2::prefetch_global_indicies_if_needed(const std::vector<uint64_t>& selected_indicies)