From d2aa787f2a925a97dad11b1acb2a065f52b097f8 Mon Sep 17 00:00:00 2001 From: cui fliter Date: Sun, 4 Sep 2022 15:51:20 +0000 Subject: [PATCH] expvar: convert f to atomic type For #53821 Change-Id: I2e7c5376e6ca3e3dbb2f92ad771aed62fca8b793 GitHub-Last-Rev: b67ddf81ecec1892871044fbcb143ca4256ebc55 GitHub-Pull-Request: golang/go#54864 Reviewed-on: https://go-review.googlesource.com/c/go/+/428195 Reviewed-by: Ian Lance Taylor TryBot-Result: Gopher Robot Reviewed-by: Keith Randall Auto-Submit: Ian Lance Taylor Reviewed-by: Keith Randall Run-TryBot: Ian Lance Taylor --- src/expvar/expvar.go | 12 ++++++------ src/expvar/expvar_test.go | 4 ++-- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/src/expvar/expvar.go b/src/expvar/expvar.go index 08cd05565d..300d8c2676 100644 --- a/src/expvar/expvar.go +++ b/src/expvar/expvar.go @@ -67,26 +67,26 @@ func (v *Int) Set(value int64) { // Float is a 64-bit float variable that satisfies the Var interface. type Float struct { - f uint64 + f atomic.Uint64 } func (v *Float) Value() float64 { - return math.Float64frombits(atomic.LoadUint64(&v.f)) + return math.Float64frombits(v.f.Load()) } func (v *Float) String() string { return strconv.FormatFloat( - math.Float64frombits(atomic.LoadUint64(&v.f)), 'g', -1, 64) + math.Float64frombits(v.f.Load()), 'g', -1, 64) } // Add adds delta to v. func (v *Float) Add(delta float64) { for { - cur := atomic.LoadUint64(&v.f) + cur := v.f.Load() curVal := math.Float64frombits(cur) nxtVal := curVal + delta nxt := math.Float64bits(nxtVal) - if atomic.CompareAndSwapUint64(&v.f, cur, nxt) { + if v.f.CompareAndSwap(cur, nxt) { return } } @@ -94,7 +94,7 @@ func (v *Float) Add(delta float64) { // Set sets v to value. func (v *Float) Set(value float64) { - atomic.StoreUint64(&v.f, math.Float64bits(value)) + v.f.Store(math.Float64bits(value)) } // Map is a string-to-Var map variable that satisfies the Var interface. diff --git a/src/expvar/expvar_test.go b/src/expvar/expvar_test.go index 552bae8c64..ee98b5ef19 100644 --- a/src/expvar/expvar_test.go +++ b/src/expvar/expvar_test.go @@ -87,8 +87,8 @@ func BenchmarkIntSet(b *testing.B) { func TestFloat(t *testing.T) { RemoveAll() reqs := NewFloat("requests-float") - if reqs.f != 0.0 { - t.Errorf("reqs.f = %v, want 0", reqs.f) + if reqs.f.Load() != 0.0 { + t.Errorf("reqs.f = %v, want 0", reqs.f.Load()) } if reqs != Get("requests-float").(*Float) { t.Errorf("Get() failed.") -- 2.51.0