tplimpl: Fix map data race in URLLock
authorBjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>
Fri, 31 Mar 2017 08:40:33 +0000 (10:40 +0200)
committerBjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>
Fri, 31 Mar 2017 08:40:33 +0000 (10:40 +0200)
tpl/tplimpl/template_resources.go

index f10aa72e3cc22e9c65f9d87a58e077e18ada1085..cfec816ad1d744cb409bf00588259dca230aa2ec 100644 (file)
@@ -46,12 +46,17 @@ type remoteLock struct {
 
 // URLLock locks an URL during download
 func (l *remoteLock) URLLock(url string) {
+       var (
+               lock *sync.Mutex
+               ok   bool
+       )
        l.Lock()
-       if _, ok := l.m[url]; !ok {
-               l.m[url] = &sync.Mutex{}
+       if lock, ok = l.m[url]; !ok {
+               lock = &sync.Mutex{}
+               l.m[url] = lock
        }
        l.Unlock()
-       l.m[url].Lock()
+       lock.Lock()
 }
 
 // URLUnlock unlocks an URL when the download has been finished. Use only in defer calls.