浏览代码

Fix releasing page mutex during template execution

Svilen Markov 8 月之前
父节点
当前提交
d4b1d240b9
共有 1 个文件被更改,包括 10 次插入6 次删除
  1. 10 6
      internal/glance/glance.go

+ 10 - 6
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()))