mirror of
https://github.com/golang/go
synced 2024-11-19 03:34:41 -07:00
runtime, runtime/cgo: make needextram a bool
Also invert it, which means it no longer needs to cross the cgo package boundary. Change-Id: I393cd073bda02b591a55d6bc6b8bb94970ea71cd Reviewed-on: https://go-review.googlesource.com/8082 Reviewed-by: Ian Lance Taylor <iant@golang.org> Run-TryBot: David Crawshaw <crawshaw@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org>
This commit is contained in:
parent
c5c6c3ab57
commit
e9d9d0befc
@ -21,3 +21,10 @@ var (
|
||||
_cgo_free unsafe.Pointer
|
||||
_cgo_thread_start unsafe.Pointer
|
||||
)
|
||||
|
||||
// iscgo is set to true by the runtime/cgo package
|
||||
var iscgo bool
|
||||
|
||||
// cgoHasExtraM is set on startup when an extra M is created for cgo.
|
||||
// The extra M must be created before any C/C++ code calls cgocallback.
|
||||
var cgoHasExtraM bool
|
||||
|
@ -15,6 +15,3 @@ import _ "unsafe" // for go:linkname
|
||||
|
||||
//go:linkname _iscgo runtime.iscgo
|
||||
var _iscgo bool = true
|
||||
|
||||
//go:linkname _needextram runtime.needextram
|
||||
var _needextram uint32 = 1 // create an extra M on first cgo call
|
||||
|
@ -718,8 +718,8 @@ func mstart1() {
|
||||
// prepare the thread to be able to handle the signals.
|
||||
if _g_.m == &m0 {
|
||||
// Create an extra M for callbacks on threads not created by Go.
|
||||
if needextram == 1 {
|
||||
needextram = 0
|
||||
if iscgo && !cgoHasExtraM {
|
||||
cgoHasExtraM = true
|
||||
newextram()
|
||||
}
|
||||
initsig()
|
||||
@ -817,7 +817,7 @@ func allocm(_p_ *p) *m {
|
||||
// put the m back on the list.
|
||||
//go:nosplit
|
||||
func needm(x byte) {
|
||||
if needextram != 0 {
|
||||
if iscgo && !cgoHasExtraM {
|
||||
// Can happen if C/C++ code calls Go from a global ctor.
|
||||
// Can not throw, because scheduler is not initialized yet.
|
||||
write(2, unsafe.Pointer(&earlycgocallback[0]), int32(len(earlycgocallback)))
|
||||
|
@ -605,11 +605,9 @@ var (
|
||||
allm *m
|
||||
allp [_MaxGomaxprocs + 1]*p
|
||||
gomaxprocs int32
|
||||
needextram uint32
|
||||
panicking uint32
|
||||
goos *int8
|
||||
ncpu int32
|
||||
iscgo bool
|
||||
signote note
|
||||
forcegc forcegcstate
|
||||
sched schedt
|
||||
|
Loading…
Reference in New Issue
Block a user