mirror of
https://github.com/golang/go
synced 2024-09-15 22:20:06 +00:00
internal/syscall/unix: use runtime.gostring for Gostring
Under the race detector, checkptr flags uses of unsafe.Slice that result in slices that straddle multiple Go allocations. Avoid that scenario by calling existing runtime code. This fixes a failure on the darwin-.*-race builders introduced in CL 446178. Change-Id: I6e0fdb37e3c3f38d97939a8799bb4d10f519c5b9 Reviewed-on: https://go-review.googlesource.com/c/go/+/449936 Reviewed-by: Ian Lance Taylor <iant@google.com> TryBot-Result: Gopher Robot <gobot@golang.org> Reviewed-by: Bryan Mills <bcmills@google.com> Run-TryBot: Ian Lance Taylor <iant@golang.org> Auto-Submit: Ian Lance Taylor <iant@golang.org>
This commit is contained in:
parent
7e4191e686
commit
122a22e0e9
|
@ -95,17 +95,11 @@ func GaiStrerror(ecode int) string {
|
|||
return GoString((*byte)(unsafe.Pointer(r1)))
|
||||
}
|
||||
|
||||
// Implemented in the runtime package.
|
||||
func gostring(*byte) string
|
||||
|
||||
func GoString(p *byte) string {
|
||||
if p == nil {
|
||||
return ""
|
||||
}
|
||||
x := unsafe.Slice(p, 1e9)
|
||||
for i, c := range x {
|
||||
if c == 0 {
|
||||
return string(x[:i])
|
||||
}
|
||||
}
|
||||
return ""
|
||||
return gostring(p)
|
||||
}
|
||||
|
||||
//go:linkname syscall_syscall syscall.syscall
|
||||
|
|
|
@ -325,6 +325,13 @@ func gostring(p *byte) string {
|
|||
return s
|
||||
}
|
||||
|
||||
// internal_syscall_gostring is a version of gostring for internal/syscall/unix.
|
||||
//
|
||||
//go:linkname internal_syscall_gostring internal/syscall/unix.gostring
|
||||
func internal_syscall_gostring(p *byte) string {
|
||||
return gostring(p)
|
||||
}
|
||||
|
||||
func gostringn(p *byte, l int) string {
|
||||
if l == 0 {
|
||||
return ""
|
||||
|
|
Loading…
Reference in a new issue