aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCuong Manh Le <cuong.manhle.vn@gmail.com>2022-09-29 11:59:30 +0700
committerGopher Robot <gobot@golang.org>2022-09-29 20:41:14 +0000
commit8fcdb60fdcc0539c5e357b2308249e4e752147f1 (patch)
treed386e51a672a47e5c2fca164501a42ef9b49e811
parent7f9b1623fab7a8a3d219f2a4db1b2fe98fadafea (diff)
downloadgolang-x-sync-8fcdb60fdcc0539c5e357b2308249e4e752147f1.tar.gz
singleflight: avoid race between multiple Do calls
This is port of CL 436437, but without the test. ForgotUnshared has not been ported here yet. Change-Id: Id54d0c41d1a7948bf008e458c44b21670ada81e4 Reviewed-on: https://go-review.googlesource.com/c/sync/+/436495 Run-TryBot: Cuong Manh Le <cuong.manhle.vn@gmail.com> Reviewed-by: Bryan Mills <bcmills@google.com> TryBot-Result: Gopher Robot <gobot@golang.org> Auto-Submit: Cuong Manh Le <cuong.manhle.vn@gmail.com> Reviewed-by: Dmitri Shuralyov <dmitshur@google.com>
-rw-r--r--singleflight/singleflight.go2
1 files changed, 1 insertions, 1 deletions
diff --git a/singleflight/singleflight.go b/singleflight/singleflight.go
index 7c7fc50..8473fb7 100644
--- a/singleflight/singleflight.go
+++ b/singleflight/singleflight.go
@@ -144,9 +144,9 @@ func (g *Group) doCall(c *call, key string, fn func() (interface{}, error)) {
c.err = errGoexit
}
- c.wg.Done()
g.mu.Lock()
defer g.mu.Unlock()
+ c.wg.Done()
if g.m[key] == c {
delete(g.m, key)
}