Skip to content

Commit

Permalink
runtime: iterate ms via allm linked list to avoid race
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
zx2c4 committed Oct 3, 2019
1 parent 9e6a84f commit 6b85fa8
Showing 1 changed file with 3 additions and 5 deletions.
8 changes: 3 additions & 5 deletions src/runtime/os_windows.go
Original file line number Diff line number Diff line change
Expand Up @@ -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{
Expand Down

0 comments on commit 6b85fa8

Please sign in to comment.