mirror of
https://github.com/golang/go
synced 2024-11-18 20:14:43 -07:00
runtime: iterate ms via allm linked list to avoid race
It's pointless to reach all ms via allgs, and doing so introduces a race, since the m member of a g can change underneath it. Instead iterate directly through the allm linked list. Updates: #31528 Updates: #34130 Change-Id: I34b88402b44339b0a5b4cd76eafd0ce6e43e2be1 Reviewed-on: https://go-review.googlesource.com/c/go/+/198417 Run-TryBot: Jason A. Donenfeld <Jason@zx2c4.com> Reviewed-by: Alex Brainman <alex.brainman@gmail.com> Reviewed-by: Austin Clements <austin@google.com> TryBot-Result: Gobot Gobot <gobot@golang.org>
This commit is contained in:
parent
9e6a84f2b1
commit
6b85fa8051
@ -277,13 +277,11 @@ func monitorSuspendResume() {
|
||||
return // Running on Windows 7, where we don't need it anyway.
|
||||
}
|
||||
var fn interface{} = func(context uintptr, changeType uint32, setting uintptr) uintptr {
|
||||
lock(&allglock)
|
||||
for _, gp := range allgs {
|
||||
if gp.m != nil && gp.m.resumesema != 0 {
|
||||
stdcall1(_SetEvent, gp.m.resumesema)
|
||||
for mp := (*m)(atomic.Loadp(unsafe.Pointer(&allm))); mp != nil; mp = mp.alllink {
|
||||
if mp.resumesema != 0 {
|
||||
stdcall1(_SetEvent, mp.resumesema)
|
||||
}
|
||||
}
|
||||
unlock(&allglock)
|
||||
return 0
|
||||
}
|
||||
params := _DEVICE_NOTIFY_SUBSCRIBE_PARAMETERS{
|
||||
|
Loading…
Reference in New Issue
Block a user