From: Austin Clements Date: Wed, 9 Aug 2017 15:19:24 +0000 (-0400) Subject: runtime: document concurrency of mheap.spans X-Git-Tag: go1.10beta1~1682 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=53f2d534504f2804ae7ccea45b5a8d6f1e693147;p=gostls13.git 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 --- 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.