From 3eb89532767ede460c7fc0e9ba6c5b10d639777c Mon Sep 17 00:00:00 2001 From: Cenk Alti Date: Mon, 26 Jun 2023 20:02:31 -0400 Subject: [PATCH] improve peer closing logic --- internal/peer/peer.go | 1 - torrent/torrent_close.go | 4 ++++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/internal/peer/peer.go b/internal/peer/peer.go index 73707ec1..1600cc49 100644 --- a/internal/peer/peer.go +++ b/internal/peer/peer.go @@ -130,7 +130,6 @@ func (p *Peer) Close() { p.downloadSpeed.Stop() p.uploadSpeed.Stop() <-p.doneC - p.Closed = true } // Done returns a channel that is closed when a peers run loop is ended. diff --git a/torrent/torrent_close.go b/torrent/torrent_close.go index e22c0c87..78495c12 100644 --- a/torrent/torrent_close.go +++ b/torrent/torrent_close.go @@ -25,7 +25,11 @@ func (t *torrent) close() { } func (t *torrent) closePeer(pe *peer.Peer) { + if pe.Closed { + return + } pe.Close() + pe.Closed = true if pd, ok := t.pieceDownloaders[pe]; ok { t.closePieceDownloader(pd) }