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:
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,