mirror of
https://github.com/ethereum/go-ethereum.git
synced 2026-06-04 22:18:40 +00:00
core/txpool/locals: fix data race (#35096)
Supersedes #35060 ``` go test -race ./core/txpool/locals/ ok github.com/ethereum/go-ethereum/core/txpool/locals 1.782s ```
This commit is contained in:
parent
fdf99d9883
commit
02dd66dfc0
1 changed files with 19 additions and 14 deletions
|
|
@ -173,6 +173,17 @@ func (tracker *TxTracker) recheck(journalCheck bool) []*types.Transaction {
|
||||||
// Start is called after all services have been constructed and the networking
|
// Start is called after all services have been constructed and the networking
|
||||||
// layer was also initialized to spawn any goroutines required by the service.
|
// layer was also initialized to spawn any goroutines required by the service.
|
||||||
func (tracker *TxTracker) Start() error {
|
func (tracker *TxTracker) Start() error {
|
||||||
|
if tracker.journal != nil {
|
||||||
|
tracker.journal.load(func(transactions []*types.Transaction) []error {
|
||||||
|
tracker.TrackAll(transactions)
|
||||||
|
return nil
|
||||||
|
})
|
||||||
|
// Setup the writer for the upcoming transactions
|
||||||
|
if err := tracker.journal.setupWriter(); err != nil {
|
||||||
|
log.Error("Failed to setup the journal writer", "err", err)
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
}
|
||||||
tracker.wg.Add(1)
|
tracker.wg.Add(1)
|
||||||
go tracker.loop()
|
go tracker.loop()
|
||||||
return nil
|
return nil
|
||||||
|
|
@ -184,25 +195,19 @@ func (tracker *TxTracker) Start() error {
|
||||||
func (tracker *TxTracker) Stop() error {
|
func (tracker *TxTracker) Stop() error {
|
||||||
close(tracker.shutdownCh)
|
close(tracker.shutdownCh)
|
||||||
tracker.wg.Wait()
|
tracker.wg.Wait()
|
||||||
return nil
|
|
||||||
|
tracker.mu.Lock()
|
||||||
|
var err error
|
||||||
|
if tracker.journal != nil {
|
||||||
|
err = tracker.journal.close()
|
||||||
|
}
|
||||||
|
tracker.mu.Unlock()
|
||||||
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
func (tracker *TxTracker) loop() {
|
func (tracker *TxTracker) loop() {
|
||||||
defer tracker.wg.Done()
|
defer tracker.wg.Done()
|
||||||
|
|
||||||
if tracker.journal != nil {
|
|
||||||
tracker.journal.load(func(transactions []*types.Transaction) []error {
|
|
||||||
tracker.TrackAll(transactions)
|
|
||||||
return nil
|
|
||||||
})
|
|
||||||
|
|
||||||
// Setup the writer for the upcoming transactions
|
|
||||||
if err := tracker.journal.setupWriter(); err != nil {
|
|
||||||
log.Error("Failed to setup the journal writer", "err", err)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
defer tracker.journal.close()
|
|
||||||
}
|
|
||||||
var (
|
var (
|
||||||
lastJournal = time.Now()
|
lastJournal = time.Now()
|
||||||
timer = time.NewTimer(10 * time.Second) // Do initial check after 10 seconds, do rechecks more seldom.
|
timer = time.NewTimer(10 * time.Second) // Do initial check after 10 seconds, do rechecks more seldom.
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue