FIX: race condition in Render() func

This commit is contained in:
Simon Martens
2025-12-10 14:12:48 +01:00
parent 26c1717c8f
commit d4092d798d

View File

@@ -5,6 +5,7 @@ import (
"html/template" "html/template"
"io" "io"
"io/fs" "io/fs"
"maps"
"reflect" "reflect"
"strings" "strings"
"sync" "sync"
@@ -473,17 +474,18 @@ func (e *Engine) AddFuncs(funcs map[string]interface{}) {
} }
func (e *Engine) Render(out io.Writer, path string, data interface{}, layout ...string) error { func (e *Engine) Render(out io.Writer, path string, data interface{}, layout ...string) error {
// TODO: check if a reload is needed if files on disk have changed e.mu.Lock()
ld := data.(fiber.Map) defer e.mu.Unlock()
gd := e.GlobalData
d := data.(fiber.Map)
if e.GlobalData != nil { if e.GlobalData != nil {
for k, v := range ld { for k, v := range e.GlobalData {
gd[k] = v if _, ok := d[k]; !ok {
d[k] = v
}
} }
} }
e.mu.Lock()
defer e.mu.Unlock()
var l *template.Template var l *template.Template
if len(layout) == 0 { if len(layout) == 0 {
lay, err := e.LayoutRegistry.Default(&e.FuncMap) lay, err := e.LayoutRegistry.Default(&e.FuncMap)
@@ -517,7 +519,7 @@ func (e *Engine) Render(out io.Writer, path string, data interface{}, layout ...
return err return err
} }
err = lay.Execute(out, gd) err = lay.Execute(out, d)
if err != nil { if err != nil {
return err return err
} }