From 4f0d88cb023d51bdc5f38cdb54dd11c51765c98b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?P=C3=A9ter=20Szil=C3=A1gyi?= Date: Fri, 15 May 2015 19:43:42 +0300 Subject: [PATCH] eth/downloader: fix cancel channel double close --- eth/downloader/downloader.go | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/eth/downloader/downloader.go b/eth/downloader/downloader.go index f9bd5a6353..a0a5b20a20 100644 --- a/eth/downloader/downloader.go +++ b/eth/downloader/downloader.go @@ -212,9 +212,14 @@ func (d *Downloader) Cancel() bool { return false } // Close the current cancel channel - d.cancelLock.RLock() - close(d.cancelCh) - d.cancelLock.RUnlock() + d.cancelLock.Lock() + select { + case <-d.cancelCh: + // Channel was already closed + default: + close(d.cancelCh) + } + d.cancelLock.Unlock() // reset the queue d.queue.Reset()