aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPéter Szilágyi <peterke@gmail.com>2019-03-29 18:34:09 +0800
committerGitHub <noreply@github.com>2019-03-29 18:34:09 +0800
commit86e77900c53ebce3309099a39cbca38eb4d62fdf (patch)
tree9d373c9f8bcea73737219d0ad6c3ea04dd55ca27
parent5b0d3fa39359c027882705c221b6ddb5cd73f3d9 (diff)
parentfbe7caf13621e160cf8a1c6443016e4c012a9e53 (diff)
downloadgo-tangerine-86e77900c53ebce3309099a39cbca38eb4d62fdf.tar
go-tangerine-86e77900c53ebce3309099a39cbca38eb4d62fdf.tar.gz
go-tangerine-86e77900c53ebce3309099a39cbca38eb4d62fdf.tar.bz2
go-tangerine-86e77900c53ebce3309099a39cbca38eb4d62fdf.tar.lz
go-tangerine-86e77900c53ebce3309099a39cbca38eb4d62fdf.tar.xz
go-tangerine-86e77900c53ebce3309099a39cbca38eb4d62fdf.tar.zst
go-tangerine-86e77900c53ebce3309099a39cbca38eb4d62fdf.zip
Merge pull request #19351 from karalabe/txpool-precache-signatures
core: cache tx signature before obtaining lock
-rw-r--r--core/tx_pool.go7
1 files changed, 7 insertions, 0 deletions
diff --git a/core/tx_pool.go b/core/tx_pool.go
index 305dfcc22..411143aea 100644
--- a/core/tx_pool.go
+++ b/core/tx_pool.go
@@ -833,6 +833,9 @@ func (pool *TxPool) AddRemotes(txs []*types.Transaction) []error {
// addTx enqueues a single transaction into the pool if it is valid.
func (pool *TxPool) addTx(tx *types.Transaction, local bool) error {
+ // Cache sender in transaction before obtaining lock (pool.signer is immutable)
+ types.Sender(pool.signer, tx)
+
pool.mu.Lock()
defer pool.mu.Unlock()
@@ -851,6 +854,10 @@ func (pool *TxPool) addTx(tx *types.Transaction, local bool) error {
// addTxs attempts to queue a batch of transactions if they are valid.
func (pool *TxPool) addTxs(txs []*types.Transaction, local bool) []error {
+ // Cache senders in transactions before obtaining lock (pool.signer is immutable)
+ for _, tx := range txs {
+ types.Sender(pool.signer, tx)
+ }
pool.mu.Lock()
defer pool.mu.Unlock()