mirror of
https://github.com/golang/go
synced 2024-11-13 20:20:30 -07:00
c5fee935bb
When building/using plugins on darwin, we need to use flat namespace so the same symbol from the main executable and the plugin can be resolved to the same address. Apparently, when using flat namespace the dynamic linker can hang at forkExec when resolving a lazy binding. Work around it by forcing early bindings. Fixes #38824. Change-Id: I983aa0a0960b15bf3f7871382e8231ee244655f4 Reviewed-on: https://go-review.googlesource.com/c/go/+/372798 Trust: Cherry Mui <cherryyz@google.com> Reviewed-by: Than McIntosh <thanm@google.com> Reviewed-by: Ian Lance Taylor <iant@golang.org> Run-TryBot: Cherry Mui <cherryyz@google.com> TryBot-Result: Gopher Robot <gobot@golang.org>
31 lines
502 B
Go
31 lines
502 B
Go
// Copyright 2021 The Go Authors. All rights reserved.
|
|
// Use of this source code is governed by a BSD-style
|
|
// license that can be found in the LICENSE file.
|
|
|
|
package main
|
|
|
|
import (
|
|
"os"
|
|
"os/exec"
|
|
_ "plugin"
|
|
"sync"
|
|
)
|
|
|
|
func main() {
|
|
if os.Args[1] != "1" {
|
|
return
|
|
}
|
|
|
|
var wg sync.WaitGroup
|
|
for i := 0; i < 8; i++ {
|
|
wg.Add(1)
|
|
go func() {
|
|
defer wg.Done()
|
|
// does not matter what we exec, just exec itself
|
|
cmd := exec.Command("./forkexec.exe", "0")
|
|
cmd.Run()
|
|
}()
|
|
}
|
|
wg.Wait()
|
|
}
|