Commit 6b85fa80 authored by Jason A. Donenfeld's avatar Jason A. Donenfeld

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: default avatarAlex Brainman <alex.brainman@gmail.com>
Reviewed-by: default avatarAustin Clements <austin@google.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
parent 9e6a84f2
......@@ -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{
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment