From d4b1d240b9dc1bcf735e2582cec9383e795f0dfe Mon Sep 17 00:00:00 2001 From: Svilen Markov <7613769+svilenmarkov@users.noreply.github.com> Date: Sun, 8 Dec 2024 14:55:53 +0000 Subject: [PATCH] Fix releasing page mutex during template execution --- internal/glance/glance.go | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/internal/glance/glance.go b/internal/glance/glance.go index daa920c..b1fcc37 100644 --- a/internal/glance/glance.go +++ b/internal/glance/glance.go @@ -92,9 +92,6 @@ func newApplication(config *config) (*application, error) { } func (p *page) updateOutdatedWidgets() { - p.mu.Lock() - defer p.mu.Unlock() - now := time.Now() var wg sync.WaitGroup @@ -168,10 +165,17 @@ func (a *application) handlePageContentRequest(w http.ResponseWriter, r *http.Re Page: page, } - page.updateOutdatedWidgets() - + var err error var responseBytes bytes.Buffer - err := pageContentTemplate.Execute(&responseBytes, pageData) + + func() { + page.mu.Lock() + defer page.mu.Unlock() + + page.updateOutdatedWidgets() + err = pageContentTemplate.Execute(&responseBytes, pageData) + }() + if err != nil { w.WriteHeader(http.StatusInternalServerError) w.Write([]byte(err.Error()))