]> Cypherpunks.ru repositories - gostls13.git/commitdiff
expvar: convert f to atomic type
authorcui fliter <imcusg@gmail.com>
Sun, 4 Sep 2022 15:51:20 +0000 (15:51 +0000)
committerGopher Robot <gobot@golang.org>
Thu, 10 Nov 2022 05:17:55 +0000 (05:17 +0000)
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 <iant@google.com>
TryBot-Result: Gopher Robot <gobot@golang.org>
Reviewed-by: Keith Randall <khr@golang.org>
Auto-Submit: Ian Lance Taylor <iant@google.com>
Reviewed-by: Keith Randall <khr@google.com>
Run-TryBot: Ian Lance Taylor <iant@google.com>

src/expvar/expvar.go
src/expvar/expvar_test.go

index 08cd05565d42495d3848308c0fa43ee144105a59..300d8c267643c245d33f66f18d2efb5e7553ed90 100644 (file)
@@ -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.
index 552bae8c64a62f9e6485f0c334f23cdb3684efae..ee98b5ef19ab0212a0072c37d5c1f62adf3a993f 100644 (file)
@@ -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.")