From 5767c65c624072ddd0982f83a7e6288e369cfe96 Mon Sep 17 00:00:00 2001
From: Michael Eischer <michael.eischer@fau.de>
Date: Sun, 2 Aug 2020 12:16:03 +0200
Subject: [PATCH] delete: properly close fileChan if context is canceled

---
 cmd/restic/delete.go | 15 ++++++++++-----
 1 file changed, 10 insertions(+), 5 deletions(-)

diff --git a/cmd/restic/delete.go b/cmd/restic/delete.go
index 26ca08196..4b9ac3e4f 100644
--- a/cmd/restic/delete.go
+++ b/cmd/restic/delete.go
@@ -25,16 +25,21 @@ const numDeleteWorkers = 8
 func deleteFiles(gopts GlobalOptions, ignoreError bool, repo restic.Repository, fileList restic.IDSet, fileType restic.FileType) error {
 	totalCount := len(fileList)
 	fileChan := make(chan restic.ID)
-	go func() {
+	wg, ctx := errgroup.WithContext(gopts.ctx)
+	wg.Go(func() error {
+		defer close(fileChan)
 		for id := range fileList {
-			fileChan <- id
+			select {
+			case fileChan <- id:
+			case <-ctx.Done():
+				return nil
+			}
 		}
-		close(fileChan)
-	}()
+		return nil
+	})
 
 	bar := newProgressMax(!gopts.JSON && !gopts.Quiet, uint64(totalCount), "files deleted")
 	defer bar.Done()
-	wg, ctx := errgroup.WithContext(gopts.ctx)
 	for i := 0; i < numDeleteWorkers; i++ {
 		wg.Go(func() error {
 			for id := range fileChan {