diff options
author | Péter Szilágyi <peterke@gmail.com> | 2018-03-02 17:57:11 +0800 |
---|---|---|
committer | Péter Szilágyi <peterke@gmail.com> | 2018-03-02 18:02:23 +0800 |
commit | 6f13e515f40ef84ff277d373488c99de49e33f18 (patch) | |
tree | eebf4710e031598fbb779355785257ca470299d6 /cmd/faucet/faucet.go | |
parent | a76e46e3d7cb77bfcbc95d92df9f4b6ccdd742f2 (diff) | |
download | dexon-6f13e515f40ef84ff277d373488c99de49e33f18.tar.gz dexon-6f13e515f40ef84ff277d373488c99de49e33f18.tar.zst dexon-6f13e515f40ef84ff277d373488c99de49e33f18.zip |
cmd/faucet: update state in background, skip when busy
Diffstat (limited to 'cmd/faucet/faucet.go')
-rw-r--r-- | cmd/faucet/faucet.go | 19 |
1 files changed, 16 insertions, 3 deletions
diff --git a/cmd/faucet/faucet.go b/cmd/faucet/faucet.go index 095668c86..5bad09bbd 100644 --- a/cmd/faucet/faucet.go +++ b/cmd/faucet/faucet.go @@ -533,9 +533,11 @@ func (f *faucet) loop() { } defer sub.Unsubscribe() - for { - select { - case head := <-heads: + // Start a goroutine to update the state from head notifications in the background + update := make(chan *types.Header) + + go func() { + for head := range update { // New chain head arrived, query the current stats and stream to clients var ( balance *big.Int @@ -588,6 +590,17 @@ func (f *faucet) loop() { } } 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: // Pending requests updated, stream to clients |