From c46aae23daf0a1a172e08f97dcf2d7159e33eae5 Mon Sep 17 00:00:00 2001 From: Evgeny Danilenko <6655321@bk.ru> Date: Thu, 9 Feb 2023 11:07:44 +0400 Subject: [PATCH] add check for empty lists in txpool (#704) * add check * linters --- core/tx_list.go | 8 ++++++-- core/tx_pool.go | 5 ++++- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/core/tx_list.go b/core/tx_list.go index e763777e33..fea4434b9b 100644 --- a/core/tx_list.go +++ b/core/tx_list.go @@ -351,9 +351,8 @@ func (m *txSortedMap) lastElement() *types.Transaction { m.cacheMu.Unlock() - cache = make(types.Transactions, 0, len(m.items)) - m.m.RLock() + cache = make(types.Transactions, 0, len(m.items)) for _, tx := range m.items { cache = append(cache, tx) @@ -373,6 +372,11 @@ func (m *txSortedMap) lastElement() *types.Transaction { hitCacheCounter.Inc(1) } + ln := len(cache) + if ln == 0 { + return nil + } + return cache[len(cache)-1] } diff --git a/core/tx_pool.go b/core/tx_pool.go index e98fd2e0ae..a3a10e7023 100644 --- a/core/tx_pool.go +++ b/core/tx_pool.go @@ -1539,6 +1539,7 @@ func (pool *TxPool) runReorg(ctx context.Context, done chan struct{}, reset *txp // remove any transaction that has been included in the block or was invalidated // because of another transaction (e.g. higher gas price). + //nolint:nestif if reset != nil { tracing.ElapsedTime(ctx, span, "new block", func(_ context.Context, innerSpan trace.Span) { @@ -1573,7 +1574,9 @@ func (pool *TxPool) runReorg(ctx context.Context, done chan struct{}, reset *txp tracing.ElapsedTime(ctx, innerSpan, "09 fill nonces", func(_ context.Context, innerSpan trace.Span) { for addr, list := range pool.pending { highestPending = list.LastElement() - nonces[addr] = highestPending.Nonce() + 1 + if highestPending != nil { + nonces[addr] = highestPending.Nonce() + 1 + } } })