mirror of
https://github.com/golang/go
synced 2024-11-24 07:50:13 -07:00
runtime: Plan 9 - prevent preemption by GC while exiting
On Plan 9, there's no "kill all threads" system call, so exit is done by sending a "go: exit" note to each OS process. If concurrent GC occurs during this loop, deadlock sometimes results. Prevent this by incrementing m.locks before sending notes. Change-Id: I31aa15134ff6e42d9a82f9f8a308620b3ad1b1b1 Reviewed-on: https://go-review.googlesource.com/20477 Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org> Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org>
This commit is contained in:
parent
87103a1ab7
commit
6b59d61822
@ -151,6 +151,7 @@ var goexits = []byte("go: exit ")
|
||||
|
||||
func goexitsall(status *byte) {
|
||||
var buf [_ERRMAX]byte
|
||||
getg().m.locks++
|
||||
n := copy(buf[:], goexits)
|
||||
n = copy(buf[n:], gostringnocopy(status))
|
||||
pid := getpid()
|
||||
@ -159,6 +160,7 @@ func goexitsall(status *byte) {
|
||||
postnote(mp.procid, buf[:])
|
||||
}
|
||||
}
|
||||
getg().m.locks--
|
||||
}
|
||||
|
||||
var procdir = []byte("/proc/")
|
||||
|
Loading…
Reference in New Issue
Block a user