mirror of
https://github.com/golang/go.git
synced 2025-12-08 06:10:04 +00:00
sync: throw, not panic, for unlock of unlocked mutex
The panic leaves the lock in an unusable state. Trying to panic with a usable state makes the lock significantly less efficient and scalable (see early CL patch sets and discussion). Instead, use runtime.throw, which will crash the program directly. In general throw is reserved for when the runtime detects truly serious, unrecoverable problems. This problem is certainly serious, and, without a significant performance hit, is unrecoverable. Fixes #13879. Change-Id: I41920d9e2317270c6f909957d195bd8b68177f8d Reviewed-on: https://go-review.googlesource.com/31359 Reviewed-by: Austin Clements <austin@google.com> Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
This commit is contained in:
parent
d2315fdc11
commit
40d81cf061
5 changed files with 107 additions and 56 deletions
|
|
@ -576,6 +576,11 @@ func dopanic(unused int) {
|
|||
*(*int)(nil) = 0
|
||||
}
|
||||
|
||||
//go:linkname sync_throw sync.throw
|
||||
func sync_throw(s string) {
|
||||
throw(s)
|
||||
}
|
||||
|
||||
//go:nosplit
|
||||
func throw(s string) {
|
||||
print("fatal error: ", s, "\n")
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue