From 026ebd62c0deec8da03ee22959f433db82bfda4e Mon Sep 17 00:00:00 2001
From: Nick White <git@njw.name>
Date: Wed, 4 Sep 2019 17:01:11 +0100
Subject: Ensure any channels that need to be consumed before goroutine is
 finished are done in the case of an error

---
 bookpipeline/cmd/bookpipeline/main.go | 5 +++++
 1 file changed, 5 insertions(+)

diff --git a/bookpipeline/cmd/bookpipeline/main.go b/bookpipeline/cmd/bookpipeline/main.go
index 44b6ca6..c7dde5b 100644
--- a/bookpipeline/cmd/bookpipeline/main.go
+++ b/bookpipeline/cmd/bookpipeline/main.go
@@ -73,6 +73,7 @@ func download(dl chan string, process chan string, conn Pipeliner, dir string, e
 		logger.Println("Downloading", key)
 		err := conn.Download(conn.WIPStorageId(), key, fn)
 		if err != nil {
+			for range dl {} // consume the rest of the receiving channel so it isn't blocked
 			close(process)
 			errc <- err
 			return
@@ -89,6 +90,7 @@ func up(c chan string, done chan bool, conn Pipeliner, bookname string, errc cha
 		logger.Println("Uploading", key)
 		err := conn.Upload(conn.WIPStorageId(), key, path)
 		if err != nil {
+			for range c {} // consume the rest of the receiving channel so it isn't blocked
 			errc <- err
 			return
 		}
@@ -102,6 +104,7 @@ func preprocess(pre chan string, up chan string, errc chan error, logger *log.Lo
 		logger.Println("Preprocessing", path)
 		done, err := preproc.PreProcMulti(path, []float64{0.1, 0.2, 0.4, 0.5}, "binary", 0, true, 5, 30)
 		if err != nil {
+			for range pre {} // consume the rest of the receiving channel so it isn't blocked
 			close(up)
 			errc <- err
 			return
@@ -121,6 +124,7 @@ func ocr(training string) func(chan string, chan string, chan error, *log.Logger
 			cmd := exec.Command("tesseract", "-l", training, path, name, "hocr")
 			err := cmd.Run()
 			if err != nil {
+				for range toocr {} // consume the rest of the receiving channel so it isn't blocked
 				close(up)
 				errc <- errors.New(fmt.Sprintf("Error ocring %s: %s", path, err))
 				return
@@ -143,6 +147,7 @@ func analyse(toanalyse chan string, up chan string, errc chan error, logger *log
 		logger.Println("Calculating confidence for", path)
 		avg, err := hocr.GetAvgConf(path)
 		if err != nil {
+			for range toanalyse {} // consume the rest of the receiving channel so it isn't blocked
 			close(up)
 			errc <- errors.New(fmt.Sprintf("Error retreiving confidence for %s: %s", path, err))
 			return
-- 
cgit v1.2.1-24-ge1ad