aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorhopehook <hopehook.com@gmail.com>2022-08-25 09:42:30 +0800
committerMichael Knyszek <mknyszek@google.com>2022-08-26 15:36:36 +0000
commit951d2c657da75d5aad09719e89987e1e1a43bbb4 (patch)
treea9e307e0b525861d12751ae2ba9665c3c3cb61e8 /src
parent7a1ae605ebc0a30c1ec83f967d9a0a20a0bbb02b (diff)
downloadgo-951d2c657da75d5aad09719e89987e1e1a43bbb4.tar.xz
runtime: convert g.selectDone to atomic type
On the write side, g.selectDone has been converted from non-atomic to atomic access. For #53821. Change-Id: Iac46bc6acce7eed51dfd990285dd57f0d58b4ae2 Reviewed-on: https://go-review.googlesource.com/c/go/+/425414 Run-TryBot: hopehook <hopehook@qq.com> Reviewed-by: Michael Pratt <mpratt@google.com> Reviewed-by: Michael Knyszek <mknyszek@google.com> TryBot-Result: Gopher Robot <gobot@golang.org>
Diffstat (limited to 'src')
-rw-r--r--src/runtime/chan.go2
-rw-r--r--src/runtime/runtime2.go2
-rw-r--r--src/runtime/select.go2
3 files changed, 3 insertions, 3 deletions
diff --git a/src/runtime/chan.go b/src/runtime/chan.go
index 853a300ab5..a9ef0781ce 100644
--- a/src/runtime/chan.go
+++ b/src/runtime/chan.go
@@ -791,7 +791,7 @@ func (q *waitq) dequeue() *sudog {
// We use a flag in the G struct to tell us when someone
// else has won the race to signal this goroutine but the goroutine
// hasn't removed itself from the queue yet.
- if sgp.isSelect && !atomic.Cas(&sgp.g.selectDone, 0, 1) {
+ if sgp.isSelect && !sgp.g.selectDone.CompareAndSwap(0, 1) {
continue
}
diff --git a/src/runtime/runtime2.go b/src/runtime/runtime2.go
index 2d6602071b..19ccfcea0e 100644
--- a/src/runtime/runtime2.go
+++ b/src/runtime/runtime2.go
@@ -487,7 +487,7 @@ type g struct {
cgoCtxt []uintptr // cgo traceback context
labels unsafe.Pointer // profiler labels
timer *timer // cached timer for time.Sleep
- selectDone uint32 // are we participating in a select and did someone win the race?
+ selectDone atomic.Uint32 // are we participating in a select and did someone win the race?
// goroutineProfiled indicates the status of this goroutine's stack for the
// current in-progress goroutine profile
diff --git a/src/runtime/select.go b/src/runtime/select.go
index 2dd6333fa7..1072465365 100644
--- a/src/runtime/select.go
+++ b/src/runtime/select.go
@@ -329,7 +329,7 @@ func selectgo(cas0 *scase, order0 *uint16, pc0 *uintptr, nsends, nrecvs int, blo
sellock(scases, lockorder)
- gp.selectDone = 0
+ gp.selectDone.Store(0)
sg = (*sudog)(gp.param)
gp.param = nil