aboutsummaryrefslogtreecommitdiff
path: root/src/pkg/html
diff options
context:
space:
mode:
authorRobert Figueiredo <robfig@gmail.com>2013-03-12 14:35:14 -0700
committerRob Pike <r@golang.org>2013-03-12 14:35:14 -0700
commite1a5aa8105bba0be8d1fd064824983c3c685d953 (patch)
tree7e0572cd2f711de31f9bae0091907803a731041f /src/pkg/html
parentf878b67b0f9f3e66ec96f7c48f40e8a02fbd3ac0 (diff)
downloadgo-e1a5aa8105bba0be8d1fd064824983c3c685d953.tar.xz
html/template: Ensure release of namespace mutex in Template.Execute()
R=golang-dev, r CC=golang-dev https://golang.org/cl/6727046
Diffstat (limited to 'src/pkg/html')
-rw-r--r--src/pkg/html/template/template.go22
1 files changed, 14 insertions, 8 deletions
diff --git a/src/pkg/html/template/template.go b/src/pkg/html/template/template.go
index 768cee7d5f..e183898d50 100644
--- a/src/pkg/html/template/template.go
+++ b/src/pkg/html/template/template.go
@@ -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)
}