Skip to content

Commit

Permalink
hugolib: Fix deadlock when content building times out
Browse files Browse the repository at this point in the history
Fixes #5375
  • Loading branch information
bep committed Oct 30, 2018
1 parent e65268f commit 729593c
Show file tree
Hide file tree
Showing 2 changed files with 39 additions and 2 deletions.
30 changes: 30 additions & 0 deletions hugolib/hugo_sites_build_errors_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -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{})

}
11 changes: 9 additions & 2 deletions hugolib/page.go
Original file line number Diff line number Diff line change
Expand Up @@ -290,17 +290,24 @@ func (p *Page) initContent() {
defer cancel()
c := make(chan error, 1)

p.contentInitMu.Lock()
defer p.contentInitMu.Unlock()

go func() {
var err error
p.contentInitMu.Lock()
defer p.contentInitMu.Unlock()

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")
Expand Down

0 comments on commit 729593c

Please sign in to comment.