From 53f2d534504f2804ae7ccea45b5a8d6f1e693147 Mon Sep 17 00:00:00 2001 From: Austin Clements Date: Wed, 9 Aug 2017 11:19:24 -0400 Subject: [PATCH] runtime: document concurrency of mheap.spans We use lock-free reads from mheap.spans, but the safety of these is somewhat subtle. Document this. Change-Id: I928c893232176135308e38bed788d5f84ff11533 Reviewed-on: https://go-review.googlesource.com/54310 Reviewed-by: Rick Hudson --- src/runtime/mheap.go | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/runtime/mheap.go b/src/runtime/mheap.go index 893587e5d2..bf41125764 100644 --- a/src/runtime/mheap.go +++ b/src/runtime/mheap.go @@ -56,6 +56,12 @@ type mheap struct { // Internal pages map to an arbitrary span. // For pages that have never been allocated, spans entries are nil. // + // Modifications are protected by mheap.lock. Reads can be + // performed without locking, but ONLY from indexes that are + // known to contain in-use or stack spans. This means there + // must not be a safe-point between establishing that an + // address is live and looking it up in the spans array. + // // This is backed by a reserved region of the address space so // it can grow without moving. The memory up to len(spans) is // mapped. cap(spans) indicates the total reserved memory. -- 2.48.1