]> Cypherpunks repositories - gostls13.git/commit
[release-branch.go1.16] runtime: keep //go:cgo_unsafe_args arguments alive to prevent GC
authorJason A. Donenfeld <Jason@zx2c4.com>
Mon, 29 Nov 2021 20:07:04 +0000 (15:07 -0500)
committerMichael Knyszek <mknyszek@google.com>
Wed, 1 Dec 2021 22:09:36 +0000 (22:09 +0000)
commitf2b0149e5701939ebbe05449e58ab162d98d7a22
tree6d292ed15f98e229efec04b30c0bd9e77318feb3
parentf6103e9b560e1089a1491cc6438b24074ad05957
[release-branch.go1.16] runtime: keep //go:cgo_unsafe_args arguments alive to prevent GC

When syscall's DLL.FindProc calls into syscall_getprocaddress with a
byte slice pointer, we need to keep those bytes alive. Otherwise the GC
will collect the allocation, and we wind up calling `GetProcAddress` on
garbage, which showed up as various flakes in the builders. It turns out
that this problem extends to many uses of //go:cgo_unsafe_args
throughout, on all platforms. So this patch fixes the issue by keeping
non-integer pointer arguments alive through their invocation in
//go:cgo_unsafe_args functions.

Fixes #49867.
Updates #49731.

Change-Id: I93e4fbc2e8e210cb3fc53149708758bb33f2f9c7
Reviewed-on: https://go-review.googlesource.com/c/go/+/368356
Trust: Jason A. Donenfeld <Jason@zx2c4.com>
Run-TryBot: Jason A. Donenfeld <Jason@zx2c4.com>
TryBot-Result: Go Bot <gobot@golang.org>
Reviewed-by: Michael Knyszek <mknyszek@google.com>
src/runtime/sys_darwin.go
src/runtime/sys_darwin_arm64.go
src/runtime/sys_openbsd.go
src/runtime/sys_openbsd1.go
src/runtime/sys_openbsd2.go
src/runtime/syscall_solaris.go
src/runtime/syscall_windows.go