aboutsummaryrefslogtreecommitdiffstats
path: root/p2p/peer_error.go
diff options
context:
space:
mode:
authorFelix Lange <fjl@twurst.com>2015-04-08 23:37:11 +0800
committerFelix Lange <fjl@twurst.com>2015-04-10 19:26:27 +0800
commitf1d710af006d7e9ed6046ab410976bd20c1e3c97 (patch)
treef7a6b948d41d1554bdf935d2854442c58b414d63 /p2p/peer_error.go
parent22d1f0faf1fcb20063b719f8fc70534e268485b6 (diff)
downloaddexon-f1d710af006d7e9ed6046ab410976bd20c1e3c97.tar.gz
dexon-f1d710af006d7e9ed6046ab410976bd20c1e3c97.tar.zst
dexon-f1d710af006d7e9ed6046ab410976bd20c1e3c97.zip
p2p: fix Peer shutdown deadlocks
There were multiple synchronization issues in the disconnect handling, all caused by the odd special-casing of Peer.readLoop errors. Remove the special handling of read errors and make readLoop part of the Peer WaitGroup. Thanks to @Gustav-Simonsson for pointing at arrows in a diagram and playing rubber-duck.
Diffstat (limited to 'p2p/peer_error.go')
-rw-r--r--p2p/peer_error.go10
1 files changed, 4 insertions, 6 deletions
diff --git a/p2p/peer_error.go b/p2p/peer_error.go
index 0ff4f4b43..402131630 100644
--- a/p2p/peer_error.go
+++ b/p2p/peer_error.go
@@ -98,15 +98,13 @@ func (d DiscReason) String() string {
return discReasonToString[d]
}
-type discRequestedError DiscReason
-
-func (err discRequestedError) Error() string {
- return fmt.Sprintf("disconnect requested: %v", DiscReason(err))
+func (d DiscReason) Error() string {
+ return d.String()
}
func discReasonForError(err error) DiscReason {
- if reason, ok := err.(discRequestedError); ok {
- return DiscReason(reason)
+ if reason, ok := err.(DiscReason); ok {
+ return reason
}
peerError, ok := err.(*peerError)
if !ok {