aboutsummaryrefslogtreecommitdiff
path: root/src/runtime
diff options
context:
space:
mode:
authorAustin Clements <austin@google.com>2017-06-15 12:23:09 -0400
committerAustin Clements <austin@google.com>2017-10-11 17:47:10 +0000
commit12ec54724bcb016a70bcafa1bfc1d8f411fbfe74 (patch)
tree100e75559a95d39dd1297c21fb6b887450b4cd68 /src/runtime
parent4e8be99590d54cc9ea949d9eadc560a1c2456539 (diff)
downloadgo-12ec54724bcb016a70bcafa1bfc1d8f411fbfe74.tar.xz
runtime: make m.nextwaitm an muintptr
This field is really a *m (modulo its bottom bit). Change it from uintptr to muintptr to document this fact. Change-Id: I2d181a955ef1d2c1a268edf20091b440d85726c9 Reviewed-on: https://go-review.googlesource.com/46034 Run-TryBot: Austin Clements <austin@google.com> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Keith Randall <khr@golang.org> Reviewed-by: Rick Hudson <rlh@golang.org>
Diffstat (limited to 'src/runtime')
-rw-r--r--src/runtime/lock_sema.go6
-rw-r--r--src/runtime/runtime2.go2
2 files changed, 4 insertions, 4 deletions
diff --git a/src/runtime/lock_sema.go b/src/runtime/lock_sema.go
index 68fcb564af..b41f805cee 100644
--- a/src/runtime/lock_sema.go
+++ b/src/runtime/lock_sema.go
@@ -71,7 +71,7 @@ Loop:
// for this lock, chained through m->nextwaitm.
// Queue this M.
for {
- gp.m.nextwaitm = v &^ locked
+ gp.m.nextwaitm = muintptr(v &^ locked)
if atomic.Casuintptr(&l.key, v, uintptr(unsafe.Pointer(gp.m))|locked) {
break
}
@@ -103,8 +103,8 @@ func unlock(l *mutex) {
} else {
// Other M's are waiting for the lock.
// Dequeue an M.
- mp = (*m)(unsafe.Pointer(v &^ locked))
- if atomic.Casuintptr(&l.key, v, mp.nextwaitm) {
+ mp = muintptr(v &^ locked).ptr()
+ if atomic.Casuintptr(&l.key, v, uintptr(mp.nextwaitm)) {
// Dequeued an M. Wake it.
semawakeup(mp)
break
diff --git a/src/runtime/runtime2.go b/src/runtime/runtime2.go
index 325152aea4..3f99de65d5 100644
--- a/src/runtime/runtime2.go
+++ b/src/runtime/runtime2.go
@@ -432,7 +432,7 @@ type m struct {
fflag uint32 // floating point compare flags
lockedExt uint32 // tracking for external LockOSThread
lockedInt uint32 // tracking for internal lockOSThread
- nextwaitm uintptr // next m waiting for lock
+ nextwaitm muintptr // next m waiting for lock
waitunlockf unsafe.Pointer // todo go func(*g, unsafe.pointer) bool
waitlock unsafe.Pointer
waittraceev byte