]> Cypherpunks repositories - gostls13.git/commit
runtime: explicitly keep handle alive during getOrAddWeakHandle
authorMichael Anthony Knyszek <mknyszek@google.com>
Wed, 20 Nov 2024 19:12:58 +0000 (19:12 +0000)
committerGopher Robot <gobot@golang.org>
Wed, 20 Nov 2024 19:46:18 +0000 (19:46 +0000)
commit88cfad0c89014f364e3309e7ee6c4e0d3d382685
tree7fe93da07c49c7cdfd55515375fad27f0e7f5b28
parente0b569842d0ef5deed5c455eef001b02aec27934
runtime: explicitly keep handle alive during getOrAddWeakHandle

getOrAddWeakHandle is very careful about keeping its input alive across
the operation, but not very careful about keeping the heap-allocated
handle it creates alive. In fact, there's a window in this function
where it is *only* visible via the special. Specifically, the window of
time between when the handle is stored in the special and when the
special actually becomes visible to the GC.

(If we fail to add the special because it already exists, that case is
fine. We don't even use the same handle value, but the one we obtain
from the attached GC-visible special, *and* we return that value, so it
remains live.)

Fixes #70455.

Change-Id: Iadaff0cfb93bcaf61ba2b05be7fa0519c481de82
Reviewed-on: https://go-review.googlesource.com/c/go/+/630315
LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
Auto-Submit: Michael Knyszek <mknyszek@google.com>
Reviewed-by: Cherry Mui <cherryyz@google.com>
Reviewed-by: Carlos Amedee <carlos@golang.org>
src/runtime/mheap.go