diff --git a/execution/namereg_cache.go b/execution/namereg_cache.go index f941b9f9ba370057153acd781f3a8cd6ce2496c9..5cb0c63aacd2b8d1851f3901fb93dae044cd7ae2 100644 --- a/execution/namereg_cache.go +++ b/execution/namereg_cache.go @@ -109,11 +109,13 @@ func (cache *NameRegCache) Sync(state NameRegWriter) error { if nameInfo.removed { err := state.RemoveNameRegEntry(name) if err != nil { + nameInfo.RUnlock() return err } } else if nameInfo.updated { err := state.UpdateNameRegEntry(nameInfo.entry) if err != nil { + nameInfo.RUnlock() return err } } @@ -150,16 +152,19 @@ func (cache *NameRegCache) get(name string) (*nameInfo, error) { nmeInfo := cache.names[name] cache.RUnlock() if nmeInfo == nil { - entry, err := cache.backend.GetNameRegEntry(name) - if err != nil { - return nil, err - } - nmeInfo = &nameInfo{ - entry: entry, - } cache.Lock() - cache.names[name] = nmeInfo - cache.Unlock() + defer cache.Unlock() + nmeInfo = cache.names[name] + if nmeInfo == nil { + entry, err := cache.backend.GetNameRegEntry(name) + if err != nil { + return nil, err + } + nmeInfo = &nameInfo{ + entry: entry, + } + cache.names[name] = nmeInfo + } } return nmeInfo, nil }