From 7a849e6f200241403b7c2d231483243c7e322eff Mon Sep 17 00:00:00 2001 From: Justin Li Date: Mon, 21 Jul 2014 10:57:00 -0400 Subject: [PATCH] Defer closing connections to prevent leaking them --- tracker/announce.go | 9 +++------ tracker/scrape.go | 11 ++++------- 2 files changed, 7 insertions(+), 13 deletions(-) diff --git a/tracker/announce.go b/tracker/announce.go index 4ea8288..1ee0578 100644 --- a/tracker/announce.go +++ b/tracker/announce.go @@ -18,6 +18,8 @@ func (tkr *Tracker) HandleAnnounce(ann *models.Announce, w Writer) error { return err } + defer conn.Close() + if tkr.cfg.Whitelist { err = conn.FindClient(ann.ClientID()) if err == ErrClientUnapproved { @@ -86,12 +88,7 @@ func (tkr *Tracker) HandleAnnounce(ann *models.Announce, w Writer) error { conn.PurgeInactiveTorrent(torrent.Infohash) } - err = w.WriteAnnounce(newAnnounceResponse(ann, peer, torrent)) - if err != nil { - return err - } - - return conn.Close() + return w.WriteAnnounce(newAnnounceResponse(ann, peer, torrent)) } // updateSwarm handles the changes to a torrent's swarm given an announce. diff --git a/tracker/scrape.go b/tracker/scrape.go index 6167c9c..02f3f1a 100644 --- a/tracker/scrape.go +++ b/tracker/scrape.go @@ -8,12 +8,14 @@ import "github.com/chihaya/chihaya/tracker/models" // HandleScrape encapsulates all the logic of handling a BitTorrent client's // scrape without being coupled to any transport protocol. -func (tkr *Tracker) HandleScrape(scrape *models.Scrape, w Writer) error { +func (tkr *Tracker) HandleScrape(scrape *models.Scrape, w Writer) (err error) { conn, err := tkr.Pool.Get() if err != nil { return err } + defer conn.Close() + if tkr.cfg.Private { _, err = conn.FindUser(scrape.Passkey) if err == ErrUserDNE { @@ -36,10 +38,5 @@ func (tkr *Tracker) HandleScrape(scrape *models.Scrape, w Writer) error { torrents = append(torrents, torrent) } - err = w.WriteScrape(&models.ScrapeResponse{torrents}) - if err != nil { - return err - } - - return conn.Close() + return w.WriteScrape(&models.ScrapeResponse{torrents}) }