diff options
author | Bjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com> | 2017-11-16 11:59:45 +0100 |
---|---|---|
committer | Bjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com> | 2017-11-16 11:59:45 +0100 |
commit | 6233ddf9d19b51f69c0c4a796d88732d1700e585 (patch) | |
tree | 7d049e63a71ebd3e13dff02cfd56f5c00716f1a9 /tpl | |
parent | e66d813bcb4fcd3621c9bfa7e232a30f5a372398 (diff) |
tpl/partials: Fix the lock contention in cached partial
Fixes #4086
Diffstat (limited to 'tpl')
-rw-r--r-- | tpl/partials/partials.go | 14 |
1 files changed, 6 insertions, 8 deletions
diff --git a/tpl/partials/partials.go b/tpl/partials/partials.go index d999041be..beb09f426 100644 --- a/tpl/partials/partials.go +++ b/tpl/partials/partials.go @@ -120,19 +120,17 @@ func (ns *Namespace) getOrCreate(key, name string, context interface{}) (interfa return p, nil } - ns.cachedPartials.Lock() - defer ns.cachedPartials.Unlock() - - // Double-check. - if p, ok = ns.cachedPartials.p[key]; ok { - return p, nil - } - p, err := ns.Include(name, context) if err != nil { return nil, err } + ns.cachedPartials.Lock() + defer ns.cachedPartials.Unlock() + // Double-check. + if p2, ok := ns.cachedPartials.p[key]; ok { + return p2, nil + } ns.cachedPartials.p[key] = p return p, nil |