hugolib: Fix deadlock when content building times out

Fixes #5375
This commit is contained in:
Bjørn Erik Pedersen 2018-10-30 11:15:15 +01:00
parent e65268f2c2
commit 729593c842
2 changed files with 39 additions and 2 deletions

View file

@ -313,3 +313,33 @@ Some content.
}
}
}
// https://github.com/gohugoio/hugo/issues/5375
func TestSiteBuildTimeout(t *testing.T) {
b := newTestSitesBuilder(t)
b.WithConfigFile("toml", `
timeout = 5
`)
b.WithTemplatesAdded("_default/single.html", `
{{ .WordCount }}
`, "shortcodes/c.html", `
{{ range .Page.Site.RegularPages }}
{{ .WordCount }}
{{ end }}
`)
for i := 1; i < 100; i++ {
b.WithContent(fmt.Sprintf("page%d.md", i), `---
title: "A page"
---
{{< c >}}`)
}
b.CreateSites().Build(BuildCfg{})
}

View file

@ -290,17 +290,24 @@ func (p *Page) initContent() {
defer cancel()
c := make(chan error, 1)
go func() {
var err error
p.contentInitMu.Lock()
defer p.contentInitMu.Unlock()
go func() {
var err error
err = p.prepareForRender()
if err != nil {
c <- err
return
}
select {
case <-ctx.Done():
return
default:
}
if len(p.summary) == 0 {
if err = p.setAutoSummary(); err != nil {
err = p.errorf(err, "failed to set auto summary")