commit | 4bb67bc21eea06afadceec239bae6e5e40a9e759 | [log] [tgz] |
---|---|---|
author | Rhys Hiltner <rhys.hiltner@gmail.com> | Fri Apr 19 22:12:18 2024 +0000 |
committer | Gopher Robot <gobot@golang.org> | Mon Apr 22 14:29:04 2024 +0000 |
tree | c6a2329b64053275ae75435ec4ffee2248b28a18 | |
parent | 2dddc7ef881669276c96356ec44c4e46ec20b1e9 [diff] |
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>
Go is an open source programming language that makes it easy to build simple, reliable, and efficient software.
Gopher image by Renee French, licensed under Creative Commons 4.0 Attributions license.
Our canonical Git repository is located at https://go.googlesource.com/go. There is a mirror of the repository at https://github.com/golang/go.
Unless otherwise noted, the Go source files are distributed under the BSD-style license found in the LICENSE file.
Official binary distributions are available at https://go.dev/dl/.
After downloading a binary release, visit https://go.dev/doc/install for installation instructions.
If a binary distribution is not available for your combination of operating system and architecture, visit https://go.dev/doc/install/source for source installation instructions.
Go is the work of thousands of contributors. We appreciate your help!
To contribute, please read the contribution guidelines at https://go.dev/doc/contribute.
Note that the Go project uses the issue tracker for bug reports and proposals only. See https://go.dev/wiki/Questions for a list of places to ask questions about the Go language.