hugo

Unnamed repository; edit this file 'description' to name the repository.

git clone git://git.shimmy1996.com/hugo.git
commit a0167d838ea37082e55da7941f32cce0e0662cf4
parent 63a6da06d87a8f299a954858ad1300dfc225544b
Author: Bjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>
Date:   Fri, 23 Sep 2016 19:04:19 +0200

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
Diffstat:
Mhugolib/hugo_sites_test.go | 4+++-
Mhugolib/site.go | 9++++++++-
2 files changed, 11 insertions(+), 2 deletions(-)
diff --git a/hugolib/hugo_sites_test.go b/hugolib/hugo_sites_test.go
@@ -10,6 +10,7 @@ import (
 	"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 TestMultiSitesBuild(t *testing.T) {
 }
 
 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 doTestMultiSitesBuild(t *testing.T, configTemplate, configSuffix string) {
 }
 
 func TestMultiSitesRebuild(t *testing.T) {
+	defer leaktest.Check(t)()
 	testCommonResetState()
 	siteConfig := testSiteConfig{DefaultContentLanguage: "fr"}
 	sites := createMultiTestSites(t, siteConfig, multiSiteTOMLConfigTemplate)
@@ -654,7 +657,6 @@ func TestChangeDefaultLanguage(t *testing.T) {
 	// 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 = `
diff --git a/hugolib/site.go b/hugolib/site.go
@@ -526,7 +526,7 @@ func (s *Site) reBuild(events []fsnotify.Event) (whatChanged, error) {
 	// 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)
@@ -611,6 +611,13 @@ func (s *Site) reBuild(events []fsnotify.Event) (whatChanged, error) {
 
 	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,
 		other:  len(tmplChanged) > 0 || len(i18nChanged) > 0 || len(dataChanged) > 0,