mirror of
https://github.com/golang/go.git
synced 2025-05-17 21:34:36 +00:00
runtime: disable use of template thread on Plan 9
CL 46033 added a "template thread" mechanism to allow creation of thread with a known-good state from a thread of unknown state. However, we are experiencing issues on Plan 9 with programs using the os/exec and net package. These package are relying on runtime.LockOSThread. Updates #22227. Change-Id: I85b71580a41df9fe8b24bd8623c064b6773288b0 Reviewed-on: https://go-review.googlesource.com/70231 Run-TryBot: David du Colombier <0intro@gmail.com> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Austin Clements <austin@google.com>
This commit is contained in:
parent
18508740b9
commit
d155b32f8d
@ -1813,7 +1813,7 @@ func newm(fn func(), _p_ *p) {
|
||||
mp := allocm(_p_, fn)
|
||||
mp.nextp.set(_p_)
|
||||
mp.sigmask = initSigmask
|
||||
if gp := getg(); gp != nil && gp.m != nil && (gp.m.lockedExt != 0 || gp.m.incgo) {
|
||||
if gp := getg(); gp != nil && gp.m != nil && (gp.m.lockedExt != 0 || gp.m.incgo) && GOOS != "plan9" {
|
||||
// We're on a locked M or a thread that may have been
|
||||
// started by C. The kernel state of this thread may
|
||||
// be strange (the user may have locked it for that
|
||||
@ -1821,6 +1821,8 @@ func newm(fn func(), _p_ *p) {
|
||||
// thread. Instead, ask a known-good thread to create
|
||||
// the thread for us.
|
||||
//
|
||||
// This is disabled on Plan 9. See golang.org/issue/22227.
|
||||
//
|
||||
// TODO: This may be unnecessary on Windows, which
|
||||
// doesn't model thread creation off fork.
|
||||
lock(&newmHandoff.lock)
|
||||
@ -3443,7 +3445,7 @@ func dolockOSThread() {
|
||||
// A goroutine should call LockOSThread before calling OS services or
|
||||
// non-Go library functions that depend on per-thread state.
|
||||
func LockOSThread() {
|
||||
if atomic.Load(&newmHandoff.haveTemplateThread) == 0 {
|
||||
if atomic.Load(&newmHandoff.haveTemplateThread) == 0 && GOOS != "plan9" {
|
||||
// If we need to start a new thread from the locked
|
||||
// thread, we need the template thread. Start it now
|
||||
// while we're in a known-good state.
|
||||
|
Loading…
x
Reference in New Issue
Block a user