]> Cypherpunks repositories - gostls13.git/commit
runtime: always acquire M when acquiring locks by rank
authorRhys Hiltner <rhys.hiltner@gmail.com>
Fri, 19 Apr 2024 22:12:18 +0000 (22:12 +0000)
committerGopher Robot <gobot@golang.org>
Mon, 22 Apr 2024 14:29:04 +0000 (14:29 +0000)
commit4bb67bc21eea06afadceec239bae6e5e40a9e759
treec6a2329b64053275ae75435ec4ffee2248b28a18
parent2dddc7ef881669276c96356ec44c4e46ec20b1e9
runtime: always acquire M when acquiring locks by rank

Profiling of runtime-internal locks checks gp.m.locks to see if it's
safe to add a new record to the profile, but direct use of
acquireLockRank can change the list of the M's active lock ranks without
updating gp.m.locks to match. The runtime's internal rwmutex
implementation makes a point of calling acquirem/releasem when
manipulating the lock rank list, but the other user of acquireLockRank
(the GC's Gscan bit) relied on the GC's invariants to avoid deadlocks.

Codify the rwmutex approach by renaming acquireLockRank to
acquireLockRankAndM and having it include a call to aquirem. Do the same
for release.

Fixes #64706
Fixes #66004

Change-Id: Ib76eaa0cc1c45b64861d03345e17e1e843c19713
GitHub-Last-Rev: 160577bdb2bb2a4e869c6fd7e53e3be8fb819182
GitHub-Pull-Request: golang/go#66276
Reviewed-on: https://go-review.googlesource.com/c/go/+/571056
LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
Reviewed-by: Michael Knyszek <mknyszek@google.com>
Auto-Submit: Rhys Hiltner <rhys.hiltner@gmail.com>
Reviewed-by: Michael Pratt <mpratt@google.com>
src/runtime/lockrank_off.go
src/runtime/lockrank_on.go
src/runtime/proc.go
src/runtime/rwmutex.go