From: Anuraag Agrawal Date: Thu, 6 Jun 2024 04:24:26 +0000 (+0000) Subject: runtime: add a note on SetFinalizer doc about method receiver X-Git-Tag: go1.23rc1~69 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=f7c330eac7777612574d8a1652fd415391f6095e;p=gostls13.git runtime: add a note on SetFinalizer doc about method receiver A method receiver can be collected during the execution of that method. This does make sense when thinking about how the GC would work, but also seems not very obvious, so a point in the docs can increase the chance of avoiding issues caused by missing KeepAlive of method receivers. Change-Id: I6817237dd022b5729dbdcda1b9f70c7059605575 GitHub-Last-Rev: 878bf3fde7b4ed66be0302ffdd5e704b4cd70a6c GitHub-Pull-Request: golang/go#67777 Reviewed-on: https://go-review.googlesource.com/c/go/+/589735 Auto-Submit: Ian Lance Taylor Reviewed-by: Keith Randall Reviewed-by: Keith Randall LUCI-TryBot-Result: Go LUCI Reviewed-by: Ian Lance Taylor --- diff --git a/src/runtime/mfinal.go b/src/runtime/mfinal.go index 9dcafb427f..78313fb74c 100644 --- a/src/runtime/mfinal.go +++ b/src/runtime/mfinal.go @@ -377,9 +377,11 @@ func blockUntilEmptyFinalizerQueue(timeout int64) bool { // In order to use finalizers correctly, the program must ensure that // the object is reachable until it is no longer required. // Objects stored in global variables, or that can be found by tracing -// pointers from a global variable, are reachable. For other objects, -// pass the object to a call of the [KeepAlive] function to mark the -// last point in the function where the object must be reachable. +// pointers from a global variable, are reachable. A function argument or +// receiver may become unreachable at the last point where the function +// mentions it. To make an unreachable object reachable, pass the object +// to a call of the [KeepAlive] function to mark the last point in the +// function where the object must be reachable. // // For example, if p points to a struct, such as os.File, that contains // a file descriptor d, and p has a finalizer that closes that file