From: David du Colombier <0intro@gmail.com> Date: Thu, 12 Oct 2017 20:59:16 +0000 (+0200) Subject: runtime: disable use of template thread on Plan 9 X-Git-Tag: go1.10beta1~685 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=d155b32f8de6a2a30c0567ec44f90ffab80ed6dc;p=gostls13.git 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 Reviewed-by: Austin Clements --- diff --git a/src/runtime/proc.go b/src/runtime/proc.go index b41f0c5ef8..4133b23584 100644 --- a/src/runtime/proc.go +++ b/src/runtime/proc.go @@ -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.