From d029058b5912312963225c40ae4bf44e3cb4be76 Mon Sep 17 00:00:00 2001 From: Michael Anthony Knyszek Date: Wed, 28 Nov 2018 18:52:35 +0000 Subject: [PATCH] runtime: fix heap pointer invariant rules in HACKING.md This change fixes an error in HACKING.md which claims all pointers which live in unmanaged memory but point to the heap must be marked as GC roots explicitly by runtime.markroot. This isn't technically necessary if the pointer is accessible through a global variable. Change-Id: I632b25272fdb2f789c5259dd1685d517f45fd435 Reviewed-on: https://go-review.googlesource.com/c/151539 Reviewed-by: Rick Hudson --- src/runtime/HACKING.md | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/runtime/HACKING.md b/src/runtime/HACKING.md index 72ba61970b..993edc67d8 100644 --- a/src/runtime/HACKING.md +++ b/src/runtime/HACKING.md @@ -205,8 +205,10 @@ marked `//go:notinheap` (see below). Objects that are allocated in unmanaged memory **must not** contain heap pointers unless the following rules are also obeyed: -1. Any pointers from unmanaged memory to the heap must be added as - explicit garbage collection roots in `runtime.markroot`. +1. Any pointers from unmanaged memory to the heap must be garbage + collection roots. More specifically, any pointer must either be + accessible through a global variable or be added as an explicit + garbage collection root in `runtime.markroot`. 2. If the memory is reused, the heap pointers must be zero-initialized before they become visible as GC roots. Otherwise, the GC may -- 2.50.0