mirror of
https://github.com/Theodor-Springmann-Stiftung/kgpz_web.git
synced 2025-12-16 20:15:29 +00:00
FIX: race condition in Render() func
This commit is contained in:
@@ -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
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user