diff --git a/singleflight/singleflight.go b/singleflight/singleflight.go index ff2c2ee4..e6e467ea 100644 --- a/singleflight/singleflight.go +++ b/singleflight/singleflight.go @@ -53,12 +53,15 @@ func (g *Group) Do(key string, fn func() (interface{}, error)) (interface{}, err g.m[key] = c g.mu.Unlock() - c.val, c.err = fn() - c.wg.Done() + afterFn := func() { + c.wg.Done() + g.mu.Lock() + delete(g.m, key) + g.mu.Unlock() + } + defer afterFn() - g.mu.Lock() - delete(g.m, key) - g.mu.Unlock() + c.val, c.err = fn() return c.val, c.err }