Fixed concurrent map write

This commit is contained in:
Magnus Åhall 2026-05-26 14:54:34 +02:00
parent 8b421ea59e
commit 7bad7a5ce8

View file

@ -11,6 +11,7 @@ import (
"net/http" "net/http"
"os" "os"
"regexp" "regexp"
"sync"
) )
type Engine struct { type Engine struct {
@ -22,6 +23,10 @@ type Engine struct {
DevMode bool DevMode bool
} }
var (
templateLock sync.Mutex
)
func NewEngine(viewFS, staticFS fs.FS, devmode bool) (e Engine, err error) { // {{{ func NewEngine(viewFS, staticFS fs.FS, devmode bool) (e Engine, err error) { // {{{
e.parsedTemplates = make(map[string]*template.Template) e.parsedTemplates = make(map[string]*template.Template)
e.viewFS = viewFS e.viewFS = viewFS
@ -62,7 +67,9 @@ func (e *Engine) getComponentFilenames() (files []string, err error) { // {{{
} // }}} } // }}}
func (e *Engine) ReloadTemplates() { // {{{ func (e *Engine) ReloadTemplates() { // {{{
templateLock.Lock()
e.parsedTemplates = make(map[string]*template.Template) e.parsedTemplates = make(map[string]*template.Template)
templateLock.Unlock()
} // }}} } // }}}
func (e *Engine) StaticResource(w http.ResponseWriter, r *http.Request) { // {{{ func (e *Engine) StaticResource(w http.ResponseWriter, r *http.Request) { // {{{
@ -119,7 +126,9 @@ func (e *Engine) getPage(layout, page string) (tmpl *template.Template, err erro
return return
} }
templateLock.Lock()
e.parsedTemplates[page] = tmpl e.parsedTemplates[page] = tmpl
templateLock.Unlock()
return return
} // }}} } // }}}
func (e *Engine) Render(p Page, w http.ResponseWriter, r *http.Request) (err error) { // {{{ func (e *Engine) Render(p Page, w http.ResponseWriter, r *http.Request) (err error) { // {{{