aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/cryptonote_core/tx_pool.cpp15
-rw-r--r--src/cryptonote_core/tx_pool.h11
2 files changed, 19 insertions, 7 deletions
diff --git a/src/cryptonote_core/tx_pool.cpp b/src/cryptonote_core/tx_pool.cpp
index 1de36be8f..2a3b7a5d5 100644
--- a/src/cryptonote_core/tx_pool.cpp
+++ b/src/cryptonote_core/tx_pool.cpp
@@ -436,8 +436,14 @@ namespace cryptonote
void tx_memory_pool::prune(size_t bytes)
{
CRITICAL_REGION_LOCAL(m_transactions_lock);
+
+ // Nothing to do if already empty
+ if (m_txs_by_fee_and_receive_time.empty())
+ return;
+
if (bytes == 0)
bytes = m_txpool_max_weight;
+
CRITICAL_REGION_LOCAL1(m_blockchain);
LockedTXN lock(m_blockchain.get_db());
bool changed = false;
@@ -482,8 +488,13 @@ namespace cryptonote
reduce_txpool_weight(meta.weight);
remove_transaction_keyimages(tx, txid);
MINFO("Pruned tx " << txid << " from txpool: weight: " << meta.weight << ", fee/byte: " << it->first.first);
+
+ auto it_prev = it;
+ --it_prev;
+
remove_tx_from_transient_lists(it, txid, !meta.matches(relay_category::broadcasted));
- it--;
+ it = it_prev;
+
changed = true;
}
catch (const std::exception &e)
@@ -1828,7 +1839,7 @@ namespace cryptonote
auto sorted_it = find_tx_in_sorted_container(txid);
if (sorted_it == m_txs_by_fee_and_receive_time.end())
{
- MERROR("Re-adding tx " << txid << " to tx pool, but it was not found in the sorted txs container");
+ MDEBUG("Re-adding tx " << txid << " to tx pool, but it was not found in the sorted txs container");
}
else
{
diff --git a/src/cryptonote_core/tx_pool.h b/src/cryptonote_core/tx_pool.h
index 23135ead1..b295ac1c2 100644
--- a/src/cryptonote_core/tx_pool.h
+++ b/src/cryptonote_core/tx_pool.h
@@ -69,11 +69,12 @@ namespace cryptonote
{
// sort by greatest first, not least
if (a.first.first > b.first.first) return true;
- else if (a.first.first < b.first.first) return false;
- else if (a.first.second < b.first.second) return true;
- else if (a.first.second > b.first.second) return false;
- else if (a.second != b.second) return true;
- else return false;
+ if (a.first.first < b.first.first) return false;
+
+ if (a.first.second < b.first.second) return true;
+ if (a.first.second > b.first.second) return false;
+
+ return memcmp(a.second.data, b.second.data, sizeof(crypto::hash)) < 0;
}
};