aboutsummaryrefslogtreecommitdiffstats
path: root/les
diff options
context:
space:
mode:
Diffstat (limited to 'les')
-rw-r--r--les/handler.go10
-rw-r--r--les/peer.go5
2 files changed, 11 insertions, 4 deletions
diff --git a/les/handler.go b/les/handler.go
index 50c32fb95..7c290b717 100644
--- a/les/handler.go
+++ b/les/handler.go
@@ -329,6 +329,11 @@ func (pm *ProtocolManager) handle(p *peer) error {
// handleMsg is invoked whenever an inbound message is received from a remote
// peer. The remote connection is torn down upon returning any error.
func (pm *ProtocolManager) handleMsg(p *peer) error {
+ select {
+ case err := <-p.errCh:
+ return err
+ default:
+ }
// Read the next message from the remote peer, and ensure it's fully consumed
msg, err := p.rw.ReadMsg()
if err != nil {
@@ -389,7 +394,10 @@ func (pm *ProtocolManager) handleMsg(p *peer) error {
if reply != nil {
p.queueSend(func() {
if err := reply.send(bv); err != nil {
- p.errCh <- err
+ select {
+ case p.errCh <- err:
+ default:
+ }
}
})
}
diff --git a/les/peer.go b/les/peer.go
index 8b506de62..0c15add9c 100644
--- a/les/peer.go
+++ b/les/peer.go
@@ -98,15 +98,14 @@ type peer struct {
}
func newPeer(version int, network uint64, isTrusted bool, p *p2p.Peer, rw p2p.MsgReadWriter) *peer {
- id := p.ID()
-
return &peer{
Peer: p,
rw: rw,
version: version,
network: network,
- id: fmt.Sprintf("%x", id),
+ id: fmt.Sprintf("%x", p.ID().Bytes()),
isTrusted: isTrusted,
+ errCh: make(chan error, 1),
}
}