]> Cypherpunks repositories - gostls13.git/commit
runtime: release worldsema with a direct G handoff
authorMichael Anthony Knyszek <mknyszek@google.com>
Mon, 20 Jul 2020 18:19:56 +0000 (18:19 +0000)
committerMichael Knyszek <mknyszek@google.com>
Fri, 30 Oct 2020 22:21:02 +0000 (22:21 +0000)
commit64a9a75ce9a353ef3d488b8e3ca977bf6df204f8
tree61a4039fe50fba49a5e0d8e465e5670b44663b07
parentf96b62be2edd8acc08b79777d692937e8ed79b4a
runtime: release worldsema with a direct G handoff

Currently worldsema is not released with direct handoff, so the
semaphore is an unfair synchronization mechanism. If, for example,
ReadMemStats is called in a loop, it can continuously stomp on attempts
by the GC to stop the world.

Note that it's specifically possible for ReadMemStats to delay a STW to
end GC since ReadMemStats is able to STW during a GC since #19112 was
fixed.

While this particular case is unlikely and the right answer in most
applications is to simply not call such an expensive operation in a
loop, this pattern is used often in tests.

Fixes #40459.

Change-Id: Ia4a54f0fd956ea145a319f9f06c4cd37dd52fd8a
Reviewed-on: https://go-review.googlesource.com/c/go/+/243977
Run-TryBot: Michael Knyszek <mknyszek@google.com>
TryBot-Result: Go Bot <gobot@golang.org>
Trust: Michael Knyszek <mknyszek@google.com>
Reviewed-by: Michael Pratt <mpratt@google.com>
Reviewed-by: Austin Clements <austin@google.com>
Reviewed-by: David Chase <drchase@google.com>
src/runtime/proc.go