Commit 4064d5e9 authored by Dmitriy Vyukov's avatar Dmitriy Vyukov

runtime: add comment

Explain why it's safe to allocate chans with flagNoScan.

LGTM=rsc
R=golang-codereviews
CC=golang-codereviews, khr, rsc
https://golang.org/cl/125510045
parent 9601abaf
...@@ -33,7 +33,11 @@ func makechan(t *chantype, size int64) *hchan { ...@@ -33,7 +33,11 @@ func makechan(t *chantype, size int64) *hchan {
var c *hchan var c *hchan
if elem.kind&kindNoPointers != 0 || size == 0 { if elem.kind&kindNoPointers != 0 || size == 0 {
// allocate memory in one call // Allocate memory in one call.
// Hchan does not contain pointers interesting for GC in this case:
// buf points into the same allocation, elemtype is persistent
// and SudoG's are referenced from G so can't be collected.
// TODO(dvyukov,rlh): Rethink when collector can move allocated objects.
c = (*hchan)(gomallocgc(hchanSize+uintptr(size)*uintptr(elem.size), nil, flagNoScan)) c = (*hchan)(gomallocgc(hchanSize+uintptr(size)*uintptr(elem.size), nil, flagNoScan))
if size > 0 && elem.size != 0 { if size > 0 && elem.size != 0 {
c.buf = (*uint8)(add(unsafe.Pointer(c), hchanSize)) c.buf = (*uint8)(add(unsafe.Pointer(c), hchanSize))
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment