aboutsummaryrefslogtreecommitdiffstats
path: root/cmd/faucet/faucet.go
diff options
context:
space:
mode:
authorPéter Szilágyi <peterke@gmail.com>2018-03-02 17:57:11 +0800
committerPéter Szilágyi <peterke@gmail.com>2018-03-02 18:02:23 +0800
commit6f13e515f40ef84ff277d373488c99de49e33f18 (patch)
treeeebf4710e031598fbb779355785257ca470299d6 /cmd/faucet/faucet.go
parenta76e46e3d7cb77bfcbc95d92df9f4b6ccdd742f2 (diff)
downloaddexon-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.go19
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