]> Cypherpunks repositories - gostls13.git/commitdiff
html/template: Ensure release of namespace mutex in Template.Execute()
authorRobert Figueiredo <robfig@gmail.com>
Tue, 12 Mar 2013 21:35:14 +0000 (14:35 -0700)
committerRob Pike <r@golang.org>
Tue, 12 Mar 2013 21:35:14 +0000 (14:35 -0700)
R=golang-dev, r
CC=golang-dev
https://golang.org/cl/6727046

src/pkg/html/template/template.go

index 768cee7d5fd220acfb22f66a017408eab7b0044c..e183898d50f150d8a0f1a064d6975711d59cc9f4 100644 (file)
@@ -45,18 +45,24 @@ func (t *Template) Templates() []*Template {
        return m
 }
 
-// Execute applies a parsed template to the specified data object,
-// writing the output to wr.
-func (t *Template) Execute(wr io.Writer, data interface{}) (err error) {
+// escape escapes all associated templates.
+func (t *Template) escape() error {
        t.nameSpace.mu.Lock()
+       defer t.nameSpace.mu.Unlock()
        if !t.escaped {
-               if err = escapeTemplates(t, t.Name()); err != nil {
-                       t.escaped = true
+               if err := escapeTemplates(t, t.Name()); err != nil {
+                       return err
                }
+               t.escaped = true
        }
-       t.nameSpace.mu.Unlock()
-       if err != nil {
-               return
+       return nil
+}
+
+// Execute applies a parsed template to the specified data object,
+// writing the output to wr.
+func (t *Template) Execute(wr io.Writer, data interface{}) error {
+       if err := t.escape(); err != nil {
+               return err
        }
        return t.text.Execute(wr, data)
 }