mirror of
https://github.com/golang/go.git
synced 2025-12-08 06:10:04 +00:00
runtime: fix conflict between lfstack and checkptr
lfstack does very unsafe things. In particular, it will not work with nodes that live on the heap. In normal use by the runtime, that is the case (it is only used for gc work bufs). But the lfstack test does use heap objects. It goes through some hoops to prevent premature deallocation, but those hoops are not enough to convince -d=checkptr that everything is ok. Instead, allocate the test objects outside the heap, like the runtime does for all of its lfstack usage. Remove the lifetime workaround from the test. Reported in https://groups.google.com/g/golang-nuts/c/psjrUV2ZKyI Change-Id: If611105eab6c823a4d6c105938ce145ed731781d Reviewed-on: https://go-review.googlesource.com/c/go/+/448899 Reviewed-by: Austin Clements <austin@google.com> Reviewed-by: Keith Randall <khr@google.com> TryBot-Result: Gopher Robot <gobot@golang.org> Run-TryBot: Keith Randall <khr@golang.org>
This commit is contained in:
parent
3e5c2c1556
commit
d6171c9be2
3 changed files with 27 additions and 19 deletions
|
|
@ -69,6 +69,9 @@ func LFStackPush(head *uint64, node *LFNode) {
|
|||
func LFStackPop(head *uint64) *LFNode {
|
||||
return (*LFNode)(unsafe.Pointer((*lfstack)(head).pop()))
|
||||
}
|
||||
func LFNodeValidate(node *LFNode) {
|
||||
lfnodeValidate((*lfnode)(unsafe.Pointer(node)))
|
||||
}
|
||||
|
||||
func Netpoll(delta int64) {
|
||||
systemstack(func() {
|
||||
|
|
@ -1709,3 +1712,9 @@ func BlockUntilEmptyFinalizerQueue(timeout int64) bool {
|
|||
func FrameStartLine(f *Frame) int {
|
||||
return f.startLine
|
||||
}
|
||||
|
||||
// PersistentAlloc allocates some memory that lives outside the Go heap.
|
||||
// This memory will never be freed; use sparingly.
|
||||
func PersistentAlloc(n uintptr) unsafe.Pointer {
|
||||
return persistentalloc(n, 0, &memstats.other_sys)
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue