aboutsummaryrefslogtreecommitdiff
path: root/src/runtime/proc.go
diff options
context:
space:
mode:
Diffstat (limited to 'src/runtime/proc.go')
-rw-r--r--src/runtime/proc.go8
1 files changed, 8 insertions, 0 deletions
diff --git a/src/runtime/proc.go b/src/runtime/proc.go
index 7b6183d905..50f9dd7f52 100644
--- a/src/runtime/proc.go
+++ b/src/runtime/proc.go
@@ -12,6 +12,12 @@ func runtime_init()
//go:linkname main_init main.init
func main_init()
+// main_init_done is a signal used by cgocallbackg that initialization
+// has been completed. It is made before _cgo_notify_runtime_init_done,
+// so all cgo calls can rely on it existing. When main_init is complete,
+// it is closed, meaning cgocallbackg can reliably receive from it.
+var main_init_done chan bool
+
//go:linkname main_main main.main
func main_main()
@@ -70,6 +76,7 @@ func main() {
// Allocate new M as main_main() is expected to block forever.
systemstack(newextram)
}
+ main_init_done = make(chan bool)
if iscgo {
if _cgo_thread_start == nil {
throw("_cgo_thread_start missing")
@@ -95,6 +102,7 @@ func main() {
}
main_init()
+ close(main_init_done)
needUnlock = false
unlockOSThread()