From dbba1347c3ae24bd46dccfd0725a5c525c505c77 Mon Sep 17 00:00:00 2001 From: "Matt T. Proud" Date: Mon, 18 Jul 2016 17:38:12 +0200 Subject: [PATCH] volume/flocker: plug time.Ticker resource leak This commit ensures that `flockerMounter.updateDatasetPrimary` does not leak running `time.Ticker` instances. Upon termination of the consuming routine, we stop the tickers. --- pkg/volume/flocker/plugin.go | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/pkg/volume/flocker/plugin.go b/pkg/volume/flocker/plugin.go index 47e8bd79e9..9bdf9bc3e6 100644 --- a/pkg/volume/flocker/plugin.go +++ b/pkg/volume/flocker/plugin.go @@ -223,8 +223,10 @@ func (b flockerMounter) updateDatasetPrimary(datasetID, primaryUUID string) erro return err } - timeoutChan := time.NewTimer(timeoutWaitingForVolume).C - tickChan := time.NewTicker(tickerWaitingForVolume).C + timeoutChan := time.NewTimer(timeoutWaitingForVolume) + defer timeoutChan.Stop() + tickChan := time.NewTicker(tickerWaitingForVolume) + defer tickChan.Stop() for { if s, err := b.client.GetDatasetState(datasetID); err == nil && s.Primary == primaryUUID { @@ -232,12 +234,12 @@ func (b flockerMounter) updateDatasetPrimary(datasetID, primaryUUID string) erro } select { - case <-timeoutChan: + case <-timeoutChan.C: return fmt.Errorf( "Timed out waiting for the dataset_id: '%s' to be moved to the primary: '%s'\n%v", datasetID, primaryUUID, err, ) - case <-tickChan: + case <-tickChan.C: break } }