mirror of
https://github.com/ethereum/go-ethereum.git
synced 2026-05-15 04:26:37 +00:00
cmd/faucet: update state in background, skip when busy
This commit is contained in:
parent
a76e46e3d7
commit
6f13e515f4
1 changed files with 16 additions and 3 deletions
|
|
@ -533,9 +533,11 @@ func (f *faucet) loop() {
|
||||||
}
|
}
|
||||||
defer sub.Unsubscribe()
|
defer sub.Unsubscribe()
|
||||||
|
|
||||||
for {
|
// Start a goroutine to update the state from head notifications in the background
|
||||||
select {
|
update := make(chan *types.Header)
|
||||||
case head := <-heads:
|
|
||||||
|
go func() {
|
||||||
|
for head := range update {
|
||||||
// New chain head arrived, query the current stats and stream to clients
|
// New chain head arrived, query the current stats and stream to clients
|
||||||
var (
|
var (
|
||||||
balance *big.Int
|
balance *big.Int
|
||||||
|
|
@ -588,6 +590,17 @@ func (f *faucet) loop() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
f.lock.RUnlock()
|
f.lock.RUnlock()
|
||||||
|
}
|
||||||
|
}()
|
||||||
|
// Wait for various events and assing to the appropriate background threads
|
||||||
|
for {
|
||||||
|
select {
|
||||||
|
case head := <-heads:
|
||||||
|
// New head arrived, send if for state update if there's none running
|
||||||
|
select {
|
||||||
|
case update <- head:
|
||||||
|
default:
|
||||||
|
}
|
||||||
|
|
||||||
case <-f.update:
|
case <-f.update:
|
||||||
// Pending requests updated, stream to clients
|
// Pending requests updated, stream to clients
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue