diff options
author | Felix Lange <fjl@twurst.com> | 2015-04-08 23:37:11 +0800 |
---|---|---|
committer | Felix Lange <fjl@twurst.com> | 2015-04-10 19:26:27 +0800 |
commit | f1d710af006d7e9ed6046ab410976bd20c1e3c97 (patch) | |
tree | f7a6b948d41d1554bdf935d2854442c58b414d63 /p2p/peer_error.go | |
parent | 22d1f0faf1fcb20063b719f8fc70534e268485b6 (diff) | |
download | dexon-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.go | 10 |
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 { |