mirror of
https://github.com/golang/go.git
synced 2025-12-08 06:10:04 +00:00
cmd/gc: fix noscan maps
Change 85e7bee introduced a bug:
it marks map buckets as noscan when key and val do not contain pointers.
However, buckets with large/outline key or val do contain pointers.
This change takes key/val size into consideration when
marking buckets as noscan.
Change-Id: I7172a0df482657be39faa59e2579dd9f209cb54d
Reviewed-on: https://go-review.googlesource.com/4901
Reviewed-by: Keith Randall <khr@golang.org>
This commit is contained in:
parent
2dd7a6d41f
commit
52dadc1f31
4 changed files with 60 additions and 3 deletions
|
|
@ -114,7 +114,7 @@ type hmap struct {
|
|||
oldbuckets unsafe.Pointer // previous bucket array of half the size, non-nil only when growing
|
||||
nevacuate uintptr // progress counter for evacuation (buckets less than this have been evacuated)
|
||||
|
||||
// If both key and value do not contain pointers, then we mark bucket
|
||||
// If both key and value do not contain pointers and are inline, then we mark bucket
|
||||
// type as containing no pointers. This avoids scanning such maps.
|
||||
// However, bmap.overflow is a pointer. In order to keep overflow buckets
|
||||
// alive, we store pointers to all overflow buckets in hmap.overflow.
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue