]> Cypherpunks repositories - gostls13.git/commit
runtime: fix GODEBUG=gccheckmark=1 and add smoke test
authorMichael Anthony Knyszek <mknyszek@google.com>
Tue, 27 Aug 2024 21:02:02 +0000 (21:02 +0000)
committerGopher Robot <gobot@golang.org>
Mon, 3 Feb 2025 16:21:09 +0000 (08:21 -0800)
commitb25b5f3ff4e671aa4f5897c788137fe91f62cf57
treeef37f5db04b45dad5303ba33911a9ff133348705
parent4f11d5879a01e64cb8bd59911bb205ffedd4f265
runtime: fix GODEBUG=gccheckmark=1 and add smoke test

This change fixes GODEBUG=gccheckmark=1 which seems to have bit-rotted.
Because the root jobs weren't being reset, it wasn't doing anything.
Then, it turned out that checkmark mode would queue up noscan objects in
workbufs, which caused it to fail. Then it turned out checkmark mode was
broken with user arenas, since their heap arenas are not registered
anywhere. Then, it turned out that checkmark mode could just not run
properly if the goroutine's preemption flag was set (since
sched.gcwaiting is true during the STW). And lastly, it turned out that
async preemption could cause erroneous checkmark failures.

This change fixes all these issues and adds a simple smoke test to dist
to run the runtime tests under gccheckmark, which exercises all of these
issues.

Fixes #69074.
Fixes #69377.
Fixes #69376.

Change-Id: Iaa0bb7b9e63ed4ba34d222b47510d6292ce168bc
Cq-Include-Trybots: luci.golang.try:gotip-linux-amd64-longtest
Reviewed-on: https://go-review.googlesource.com/c/go/+/608915
LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
Auto-Submit: Michael Knyszek <mknyszek@google.com>
Reviewed-by: Carlos Amedee <carlos@golang.org>
src/cmd/dist/test.go
src/runtime/arena.go
src/runtime/malloc.go
src/runtime/mcheckmark.go
src/runtime/mgc.go
src/runtime/mgcmark.go
src/runtime/mheap.go
src/runtime/runtime1.go