]> Cypherpunks repositories - gostls13.git/commitdiff
sync/atomic: don't atomically write pointers twice
authorAustin Clements <austin@google.com>
Wed, 13 Apr 2016 19:12:32 +0000 (15:12 -0400)
committerAustin Clements <austin@google.com>
Thu, 14 Apr 2016 21:13:26 +0000 (21:13 +0000)
sync/atomic.StorePointer (which is implemented in
runtime/atomic_pointer.go) writes the pointer twice (through two
completely different code paths, no less). Fix it to only write once.

Change-Id: Id3b2aef9aa9081c2cf096833e001b93d3dd1f5da
Reviewed-on: https://go-review.googlesource.com/21999
Run-TryBot: Austin Clements <austin@google.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
Reviewed-by: Michael Matloob <matloob@golang.org>
Reviewed-by: Rick Hudson <rlh@golang.org>
src/runtime/atomic_pointer.go

index ee55de13b989ae497a6cac79576bb72dfe485e4a..4fe334014d197bc9e3b747075342cafbc42eeb1f 100644 (file)
@@ -44,7 +44,6 @@ func sync_atomic_StoreUintptr(ptr *uintptr, new uintptr)
 //go:nosplit
 func sync_atomic_StorePointer(ptr *unsafe.Pointer, new unsafe.Pointer) {
        sync_atomic_StoreUintptr((*uintptr)(unsafe.Pointer(ptr)), uintptr(new))
-       atomic.StorepNoWB(noescape(unsafe.Pointer(ptr)), new)
        writebarrierptr_nostore((*uintptr)(unsafe.Pointer(ptr)), uintptr(new))
 }