shithub: hugo

Download patch

ref: a0167d838ea37082e55da7941f32cce0e0662cf4
parent: 63a6da06d87a8f299a954858ad1300dfc225544b
author: Bjørn Erik Pedersen <[email protected]>
date: Fri Sep 23 15:04:19 EDT 2016

Fix leaky goroutine 

By making the err chan buffered so both go routines can return.

Also make sure that any errors are logged.

Fixes #2488

--- a/hugolib/hugo_sites_test.go
+++ b/hugolib/hugo_sites_test.go
@@ -10,6 +10,7 @@
 	"path/filepath"
 	"text/template"
 
+	"github.com/fortytw2/leaktest"
 	"github.com/fsnotify/fsnotify"
 	"github.com/spf13/afero"
 	"github.com/spf13/hugo/helpers"
@@ -185,6 +186,7 @@
 }
 
 func doTestMultiSitesBuild(t *testing.T, configTemplate, configSuffix string) {
+	defer leaktest.Check(t)()
 	testCommonResetState()
 	siteConfig := testSiteConfig{DefaultContentLanguage: "fr"}
 	sites := createMultiTestSitesForConfig(t, siteConfig, configTemplate, configSuffix)
@@ -347,6 +349,7 @@
 }
 
 func TestMultiSitesRebuild(t *testing.T) {
+	defer leaktest.Check(t)()
 	testCommonResetState()
 	siteConfig := testSiteConfig{DefaultContentLanguage: "fr"}
 	sites := createMultiTestSites(t, siteConfig, multiSiteTOMLConfigTemplate)
@@ -654,7 +657,6 @@
 	// Default language is now en, so that should now be the "root" language
 	assertFileContent(t, "public/fr/sect/doc1/index.html", true, "Single", "Bonjour")
 	assertFileContent(t, "public/sect/doc2/index.html", true, "Single", "Hello")
-
 }
 
 var multiSiteTOMLConfigTemplate = `
--- a/hugolib/site.go
+++ b/hugolib/site.go
@@ -526,7 +526,7 @@
 	// We do this in parallel... even though it's likely only one file at a time.
 	// We need to process the reading prior to the conversion for each file, but
 	// we can convert one file while another one is still reading.
-	errs := make(chan error)
+	errs := make(chan error, 2)
 	readResults := make(chan HandledResult)
 	filechan := make(chan *source.File)
 	convertResults := make(chan HandledResult)
@@ -610,6 +610,13 @@
 	close(convertResults)
 
 	s.timerStep("read & convert pages from source")
+
+	for i := 0; i < 2; i++ {
+		err := <-errs
+		if err != nil {
+			jww.ERROR.Println(err)
+		}
+	}
 
 	changed := whatChanged{
 		source: len(sourceChanged) > 0,