]> Cypherpunks repositories - gostls13.git/commit
runtime: formalize and fix gcPercent synchronization
authorMichael Anthony Knyszek <mknyszek@google.com>
Thu, 8 Apr 2021 21:07:02 +0000 (21:07 +0000)
committerMichael Knyszek <mknyszek@google.com>
Thu, 21 Oct 2021 18:19:51 +0000 (18:19 +0000)
commit6508fdad9d83d6792314639c9819a15894728682
treec929f6a492bfff64479470459940c1c36959e531
parent8151b56c5d1de8f654a6e6789a0e607b55845c1e
runtime: formalize and fix gcPercent synchronization

Currently gcController.gcPercent is read non-atomically by
gcControllerState.revise and gcTrigger.test, but these users may
execute concurrently with an update to gcPercent.

Although revise's results are best-effort, reading it directly in this
way is, generally speaking, unsafe.

This change makes gcPercent atomically updated for concurrent readers
and documents the complete synchronization semantics.

Because gcPercent otherwise only updated with the heap lock held or the
world stopped, all other reads can remain unsynchronized.

For #44167.

Change-Id: If09af103aae84a1e133e2d4fed8ab888d4b8f457
Reviewed-on: https://go-review.googlesource.com/c/go/+/308690
Trust: Michael Knyszek <mknyszek@google.com>
Run-TryBot: Michael Knyszek <mknyszek@google.com>
TryBot-Result: Go Bot <gobot@golang.org>
Reviewed-by: Michael Pratt <mpratt@google.com>
src/runtime/mgc.go
src/runtime/mgcpacer.go