There have been reports about infrequent paginator crashes when running the Hugo server since 0.55.0.
The reason have been narrowed down to that of parallel rebuilds.
This isn't a new thing, but the changes in 0.55.0 made it extra important to serialize the page initialization.
This commit fixes that by protecting the `Build` method with a lock when running in server mode.
Fixes #5885
Fixes #5968
// If this is running in the dev server.
running bool
+ // Serializes rebuilds when server is running.
+ runningMu sync.Mutex
+
// Render output formats for all sites.
renderFormats output.Formats
// Build builds all sites. If filesystem events are provided,
// this is considered to be a potential partial rebuild.
func (h *HugoSites) Build(config BuildCfg, events ...fsnotify.Event) error {
+ if h.running {
+ // Make sure we don't trigger rebuilds in parallel.
+ h.runningMu.Lock()
+ defer h.runningMu.Unlock()
+ }
+
ctx, task := trace.NewTask(context.Background(), "Build")
defer task.End()