diff --git a/cmd/devp2p/crawl.go b/cmd/devp2p/crawl.go
index 92aaad72a372f85b5205521a33233b086d7e0aff..7fefbd7a1c9ad7aac85b52cbe98b12f5a0dabd88 100644
--- a/cmd/devp2p/crawl.go
+++ b/cmd/devp2p/crawl.go
@@ -63,6 +63,7 @@ func (c *crawler) run(timeout time.Duration) nodeSet {
 		doneCh       = make(chan enode.Iterator, len(c.iters))
 		liveIters    = len(c.iters)
 	)
+	defer timeoutTimer.Stop()
 	for _, it := range c.iters {
 		go c.runIterator(doneCh, it)
 	}
diff --git a/cmd/wnode/main.go b/cmd/wnode/main.go
index 968f1fd49f6f1d0d51ddb52459d50daa124b5111..a94ed947d0755806b114c0977de87a1a69c6bc92 100644
--- a/cmd/wnode/main.go
+++ b/cmd/wnode/main.go
@@ -599,6 +599,7 @@ func messageLoop() {
 	}
 
 	ticker := time.NewTicker(time.Millisecond * 50)
+	defer ticker.Stop()
 
 	for {
 		select {
diff --git a/whisper/whisperv6/whisper.go b/whisper/whisperv6/whisper.go
index e9c872a990ecb312832f33f4a12508805696f277..377406b3608dd75823b43a1ff0a82cb674d3ede8 100644
--- a/whisper/whisperv6/whisper.go
+++ b/whisper/whisperv6/whisper.go
@@ -905,6 +905,7 @@ func (whisper *Whisper) update() {
 	defer whisper.wg.Done()
 	// Start a ticker to check for expirations
 	expire := time.NewTicker(expirationCycle)
+	defer expire.Stop()
 
 	// Repeat updates until termination is requested
 	for {