diff options
author | Felix Lange <fjl@twurst.com> | 2016-11-14 23:56:27 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2016-11-14 23:56:27 +0800 |
commit | d89ea3e6f90c32a97bad58b82a15af0d81f4250e (patch) | |
tree | 9acc32d1edca04b8a2b2894b3177f31c78f8298f /les/flowcontrol/control.go | |
parent | ca73dea3b9bcdf3b5424b5c48c70817439e2e304 (diff) | |
parent | b10bcd924ba79f9faa5b8f2d273a7ee02d7b89f5 (diff) | |
download | go-tangerine-d89ea3e6f90c32a97bad58b82a15af0d81f4250e.tar go-tangerine-d89ea3e6f90c32a97bad58b82a15af0d81f4250e.tar.gz go-tangerine-d89ea3e6f90c32a97bad58b82a15af0d81f4250e.tar.bz2 go-tangerine-d89ea3e6f90c32a97bad58b82a15af0d81f4250e.tar.lz go-tangerine-d89ea3e6f90c32a97bad58b82a15af0d81f4250e.tar.xz go-tangerine-d89ea3e6f90c32a97bad58b82a15af0d81f4250e.tar.zst go-tangerine-d89ea3e6f90c32a97bad58b82a15af0d81f4250e.zip |
Merge pull request #3253 from zsfelfoldi/light-topic3
Light client bugfixes and updates
Diffstat (limited to 'les/flowcontrol/control.go')
-rw-r--r-- | les/flowcontrol/control.go | 11 |
1 files changed, 7 insertions, 4 deletions
diff --git a/les/flowcontrol/control.go b/les/flowcontrol/control.go index 0b8d7f58f..acb131ea4 100644 --- a/les/flowcontrol/control.go +++ b/les/flowcontrol/control.go @@ -99,7 +99,7 @@ type ServerNode struct { params *ServerParams sumCost uint64 // sum of req costs sent to this server pending map[uint64]uint64 // value = sumCost after sending the given req - lock sync.Mutex + lock sync.RWMutex } func NewServerNode(params *ServerParams) *ServerNode { @@ -135,8 +135,8 @@ func (peer *ServerNode) canSend(maxCost uint64) uint64 { } func (peer *ServerNode) CanSend(maxCost uint64) uint64 { - peer.lock.Lock() - defer peer.lock.Unlock() + peer.lock.RLock() + defer peer.lock.RUnlock() return peer.canSend(maxCost) } @@ -148,7 +148,10 @@ func (peer *ServerNode) SendRequest(reqID, maxCost uint64) { peer.recalcBLE(getTime()) for peer.bufEstimate < maxCost { - time.Sleep(time.Duration(peer.canSend(maxCost))) + wait := time.Duration(peer.canSend(maxCost)) + peer.lock.Unlock() + time.Sleep(wait) + peer.lock.Lock() peer.recalcBLE(getTime()) } peer.bufEstimate -= maxCost |