From 9c0db2f7fde54ac535a2e9797b8c0131550809af Mon Sep 17 00:00:00 2001 From: Dave Collins <davec@conformal.com> Date: Wed, 3 Dec 2014 18:20:19 -0600 Subject: [PATCH] Ensure all tickers are explicitly stopped. As pointed out in #189, according to the Go documentation, a ticker must be stopped to release associated resources. This commit adds a defer call to stop two tickers there were previously not being stopped as well as changes two others that were being stopped over to use defer so it's more consistent. The other ticker in ScheduleShutdown is replaced and already calls Stop before replacing it, so it has not been modified. Closes #189. ok @jrick --- addrmgr/addrmanager.go | 2 +- cpuminer.go | 3 ++- peer.go | 1 + 3 files changed, 4 insertions(+), 2 deletions(-) diff --git a/addrmgr/addrmanager.go b/addrmgr/addrmanager.go index 33c6ab13..f4e18479 100644 --- a/addrmgr/addrmanager.go +++ b/addrmgr/addrmanager.go @@ -338,6 +338,7 @@ func (a *AddrManager) getTriedBucket(netAddr *btcwire.NetAddress) int { // as a goroutine. func (a *AddrManager) addressHandler() { dumpAddressTicker := time.NewTicker(dumpAddressInterval) + defer dumpAddressTicker.Stop() out: for { select { @@ -348,7 +349,6 @@ out: break out } } - dumpAddressTicker.Stop() a.savePeers() a.wg.Done() log.Trace("Address handler done") diff --git a/cpuminer.go b/cpuminer.go index b8667b38..618e5489 100644 --- a/cpuminer.go +++ b/cpuminer.go @@ -72,6 +72,7 @@ func (m *CPUMiner) speedMonitor() { var hashesPerSec float64 var totalHashes uint64 ticker := time.NewTicker(time.Second * hpsUpdateSecs) + defer ticker.Stop() out: for { @@ -261,6 +262,7 @@ func (m *CPUMiner) generateBlocks(quit chan struct{}) { // Start a ticker which is used to signal checks for stale work and // updates to the speed monitor. ticker := time.NewTicker(time.Second * hashUpdateSecs) + defer ticker.Stop() out: for { // Quit when the miner is stopped. @@ -318,7 +320,6 @@ out: } } - ticker.Stop() m.workerWg.Done() minrLog.Tracef("Generate blocks worker done") } diff --git a/peer.go b/peer.go index 394bba49..bdb63ded 100644 --- a/peer.go +++ b/peer.go @@ -1557,6 +1557,7 @@ func (p *peer) queueHandler() { pendingMsgs := list.New() invSendQueue := list.New() trickleTicker := time.NewTicker(time.Second * 10) + defer trickleTicker.Stop() // We keep the waiting flag so that we know if we have a message queued // to the outHandler or not. We could use the presence of a head of